我有许多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标签)才能使其成为防弹的吗?
答案 0 :(得分:3)
IE8及以下版本不将空文本节点计为子节点。自5.5以及可能更早以来,IE中一直支持.children[]
数组,并且该数组会在IE8及更低版本中对注释节点进行计数。只要元素中没有注释(不应该存在注释,就不需要HTML注释),那么您可以可靠地使用.children[]
。