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');
}
Другие вопросы по тегам