1

这是一个奇怪的问题,无论出于何种原因,在 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');
    }

在这种情况下,将调用启动警报,但不会调用 cycle1。

4

2 回答 2

2

改为使用childNodeschildren最初是 IE 中的专有属性,而childNodes在 W3C DOM 规范中,并且在过去十年中发布的每个主要浏览器都支持。不同之处在于children仅包含元素,而childNodes包含所有类型,特别是文本节点和注释节点。

我在下面优化了您的代码。您应该使用 声明所有变量var,包括在循环中使用的变量,例如i. 此外,document.getElementById(site_child_nodes[i].id)没有必要:如果元素没有 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');
    }
}
于 2010-06-22T09:11:40.203 回答
1

我冒险猜测它尚未实现(它仅在 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');
}
于 2010-06-22T09:12:15.630 回答