如何通过IE8处理不同的childNode计数与所有其他浏览器

时间:2013-05-23 12:24:06

标签: javascript internet-explorer internet-explorer-8 cross-browser

我有许多div想要用事件操作,比如添加/删除类,属性等。我有嵌套元素。起初我使用的是children集合,但由于支持不当,我转向childNodes

但是,现在我测试它,并通过警告检查childNodes的数量,我得到了在所有其他浏览器中为39,在IE8中为20。这使得循环不可靠,我需要检查类。我的Javascript:

function removeOnclick(){
    var parent = document.getElementById('selections');
    var parent_length = parent.childNodes.length;
    alert(parent_length);
    for (var i=0; i<39; i+=2){
    if (parent.childNodes[i].hasAttribute("onclick")) {
        parent.childNodes[i].removeAttribute("onclick");
        }
    }
}

使用此HTML格式,所有浏览器都将它们计为20(我没有粘贴所有20个节点):

<div id="selections"><div id="selection1" class="size" onclick="count(this.id);" onmouseover="onovershowpop(this.id);" onmouseout="onouthidepop(this.id);"><div class="pop">sample</div></div></div>

但是使用这种格式化,所有其他浏览器计数39个childNodes,而IE8仍然计为20:

<div id="selections">  
    <div id="selection1" class="size" onclick="count(this.id);" onmouseover="onovershowpop(this.id);" onmouseout="onouthidepop(this.id);">
        <div class="pop">sample</div>
    </div>
</div>

每次我必须进入一行(div标签)才能使其成为防弹的吗?

1 个答案:

答案 0 :(得分:3)

IE8及以下版本不将空文本节点计为子节点。自5.5以及可能更早以来,IE中一直支持.children[]数组,并且该数组会在IE8及更低版本中对注释节点进行计数。只要元素中没有注释(不应该存在注释,就不需要HTML注释),那么您可以可靠地使用.children[]