2010-06-22 89 views
1

这是一个奇怪的,无论出于何种原因,让一个元素的孩子在Camino浏览器中不工作。适用于所有其他浏览器。有人知道怎么修这个东西吗?谷歌是没有帮助:(javascript .children不工作在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不是。

回答

2

使用childNodes代替。children开始作为一个专有的属性,在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'); 
    } 
} 
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'); 
} 
相关问题