Я хочу использовать те же.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
Заранее спасибо!
Функция 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];
}
Хотя я бы поставил под вопрос, почему вам нужно увеличивать числовые идентификаторы, то одно решение просто состояло бы в том, чтобы сохранить карту идентификаторов в значениях, а затем повторить проверку карты на 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];
}
оберните его if (document.getElementById("id")! == null)?
Просто оберните все это в инструкцию 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
}
что предотвратит ошибки, поэтому, если что-то не удастся, оно все равно продолжит
el
для обработки всех ваших HTML-элементов. Но я подозреваю, что вы хотели спросить о переменнойresults
, которая является объектом, созданным из литерала объекта. Для получения дополнительной информации об этом прочитайте статью MDN Работа с объектами (см. Раздел «Создание новых объектов» для литерального синтаксиса объекта, используемого в моем ответе).