javascript. дети не работают в браузере Camino - PullRequest
1 голос
/ 22 июня 2010

По какой-то причине это странный случай, когда дочерние элементы не работают в браузере Camino.Работает во всех других браузерах.Кто-нибудь знает, как это исправить?Google не помогает: (

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 ]

2 голосов
/ 22 июня 2010

Используйте 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');
    }
}
1 голос
/ 22 июня 2010

Я рискнул бы предположить, что это еще не было реализовано (это было реализовано только в 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');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...