
实例比较childNode在ie和ff中的异同
childNode 在 ie 和 firefox 中有着不同的处理方式,ie 只会把 html 标签算作孩子结点,而 firefox 除了把 html 标签算作孩子结点外,还会把“文字、空格、换行符和制表符”算作孩子结点,也有属性和值(nodeName = "#text")。实例如下:
<ul id="test1">
<li>网页打不开</li>
<li>ie网页打不开</li>
<li>safari网页打不开</li>
<li>360网页打不开</li>
<li>火狐网页打不开</li>
</ul>
<ul id="test2"><li>网页打不开</li><li>ie网页打不开</li><li>safari网页打不开</li><li>360网页打不开</li><li>火狐网页打不开</li></ul>
<script type="text/javascript">
function showChildNodes(){
var t1 = document.getElementById("test1").childNodes;
var t2 = document.getElementById("test2").childNodes;
alert("test1 的孩子结点数: " + t1.length + ";test2 的孩子结点数: " + t2.length);
}
showChildNodes();
</script>
运行结果显示:
test1 和 test2 ie显示都是5个孩子结点;
而 firefox 不同,test1 有 11 个孩子结点,test2 有 5 个孩子结点。
上面说了,firefox 把换行符也算作孩子结点,test1 有6个换行符,所示加起来是11个孩子结点;而 test2 除了 html 标签(<li>)外什么也没有,所以只有5个孩子结点。
值得注意的是:注释(<!--说明文字-->)不是 firefox 的孩子结点。
在编写遍历 childNode 程序过程中,通常要加上
if(childNode.nodeName == "#text") continue; 或者 nodeType == 1。
排除不是 html 标签的结点,以保证 javascript 程序在 firefox 也能正常运行。