JavaScript: не нужно использовать все идентификаторы в HTML-файл?

0

Я хочу использовать те же.js для кучи html-страниц, но не обязательно все ID из этого.js на каждой отдельной странице. Прямо сейчас, если я не использую один ID; ID не отображается вообще.

var yes = 'Yes';
var no = 'No';
var available = 'Available: ';

document.getElementById("001").innerHTML=available+yes;
document.getElementById("002").innerHTML=available+no;
document.getElementById("003").innerHTML=available+yes;

Html с этим отлично работает:

 <div id="001"></div>
 <div id="002"></div>
 <div id="003"></div>

Html с этим, не так хорошо:

 <div id="002"></div>
 <div id="003"></div>

Что делать, чтобы запустить его, хотя некоторые ID не используются?

Заполните noob, возможно, это простое простое решение (?), Но я не могу его найти. Хотелось бы надеяться, что кто-то здесь может мне помочь - без полного издевательства над мной, или сказать мне, насколько это плохая практика, и что я должен переписать ее на каком-то мега-хаксерском языке, о котором я даже не слышал: D

Заранее спасибо!

Теги:

4 ответа

0
Лучший ответ

Функция document.getElementById() возвращает значение null если соответствующий элемент не найден. null.innerHTML - ошибка, которая останавливает выполнение текущего скрипта. Поэтому вам просто нужно проверить значение null:

var el = document.getElementById("001");
if (el != null) el.innerHTML = available + yes;

null тест можно упростить до:

if (el) el.innerHTML = available + yes;

Если элемент "001" всегда будет "да", "002" всегда будет "нет" и т.д., Тогда вы можете сделать это:

var results = {"001" : yes, "002" : no, "003" : yes};
var el, k;
for (k in results) {
    el = document.getElementById(k);
    if (el) el.innerHTML = available + results[k];
}
  • 0
    Это, кажется, делает свое дело и требует наименьшего количества «перекодирования». Я интересуюсь одной вещью; почему я могу использовать одну и ту же переменную для определения всех этих разных идентификаторов (в вашем примере это «el»)? Может быть, это то, что относится к JS в целом ... Это просто немного противоречит мне. PS Большое спасибо за такой педагогический ответ тоже.
  • 0
    'el' в вашем примере ' - переменные могут быть переназначены в любое время, поэтому вы можете использовать одну переменную el для обработки всех ваших HTML-элементов. Но я подозреваю, что вы хотели спросить о переменной results , которая является объектом, созданным из литерала объекта. Для получения дополнительной информации об этом прочитайте статью MDN Работа с объектами (см. Раздел «Создание новых объектов» для литерального синтаксиса объекта, используемого в моем ответе).
Показать ещё 2 комментария
1

Хотя я бы поставил под вопрос, почему вам нужно увеличивать числовые идентификаторы, то одно решение просто состояло бы в том, чтобы сохранить карту идентификаторов в значениях, а затем повторить проверку карты на null.

var m = {
    "001":yes,
    "002":no,
    "003":yes
};

for (var p in m) {
    var el = document.getElementById(p);
    if (el)  // or if (el !== null)
        el.innerHTML = available + m[p];
}
  • 0
    да, это, наверное, правильный способ сделать это
0

оберните его if (document.getElementById("id")! == null)?

0

Просто оберните все это в инструкцию try чтобы избежать каких-либо проблем и впоследствии поместите код в выражение finally:

try{
document.getElementById("001").innerHTML=available+yes;
document.getElementById("002").innerHTML=available+no;
document.getElementById("003").innerHTML=available+yes;
//etc
}
finally{
    //any other code that there is after the id stuff
}

что предотвратит ошибки, поэтому, если что-то не удастся, оно все равно продолжит

  • 0
    Это также предотвратит запуск остальной части кода в блоке, как только вы столкнетесь с ошибкой.,
  • 0
    хорошо, я буду редактировать, чтобы рассчитывать на это
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню