javascript . дети не работают в браузере Camino
По какой-то причине это странно, так как получение дочерних элементов не работает в браузере Camino. Работает во всех других браузерах. Кто-нибудь знает, как это исправить? Гугл не поможет:(
var site_result_content = document.getElementById(content_id);
site_child_nodes = site_result_content.children;
alert('started');
for(i=0;i<site_child_nodes.length;i++) {
alert('cycle1');
document.getElementById(site_child_nodes[i].id).className = 'tab_content';
ShowHide(site_child_nodes[i].id,'hidden');
}
В этом случае запущенное оповещение вызывается, но цикл1 - нет.
2 ответа
Использование childNodes
вместо. children
начинался как частная собственность, которая в IE, тогда как childNodes
находится в спецификации W3C DOM и поддерживается всеми крупными браузерами, выпущенными за последнее десятилетие. Разница в том, что children
содержит только элементы, тогда как childNodes
содержит все типы, в частности текстовые узлы и узлы комментариев.
Я оптимизировал ваш код ниже. Вы должны объявить все свои переменные с var
в том числе те, которые используются в циклах, таких как i
, Также, document.getElementById(site_child_nodes[i].id)
не требуется: он потерпит неудачу, если элемент не имеет идентификатора и точно такой же, как site_child_nodes[i]
иначе.
var site_result_content = document.getElementById(content_id);
var site_child_nodes = site_result_content.childNodes;
alert('started');
for (var i = 0, len = site_child_nodes.length; i < len; ++i) {
if (site_child_nodes[i].nodeType == 1) {
alert('cycle1');
site_child_nodes[i].className = 'tab_content';
ShowHide(site_child_nodes[i].id, 'hidden');
}
}
Я бы рискнул предположить, что это еще не было реализовано (это было реализовано только в Firefox 3.5). Ты можешь использовать childNodes
вместо этого, который возвращает список узлов (а не только элементы). Тогда проверь nodeType
чтобы убедиться, что это элемент.
var site_result_content = document.getElementById(content_id);
site_child_nodes = site_result_content.childNodes;
alert('started');
for(i=0;i<site_child_nodes.length;i++) {
// Check this is actually an element node
if (site_child_nodes[i].nodeType != 1)
continue;
alert('cycle1');
document.getElementById(site_child_nodes[i].id).className = 'tab_content';
ShowHide(site_child_nodes[i].id,'hidden');
}