javascript的childNodes函数在firefox和ie下不一致的解决方法

在JavaScript中,使用childNodes属性可以返回一个数组,这个数组包含给定元素节点的全体子节点,在下面的例子里面我们想要获得一个div下面的所有子div元素的个数:

html代码如下:

 <div   id="father">

       


1



2



3

获取子div并alert出子div数量的js代码:

结果发现在ie下面能正确得到3,在firefox下面却得到的是7,而且在ie9下面得到的也和firefox一样为7.
先来看解决办法,将代码改为:

 

这样子就正确了。
造成这样的原因是 IE是将一个完整标签作为一个节点。而Firefox除了上述的的情况外,也把一个标签的结束符“>”到下一个标签的起始符“<”之间的内容(除注释外,包括任何的文字、空格、回 车、制表符)也算是一个节点了。而且这种节点也有它们自己独特的属性和值--nodeName="#text"。在新版本的ie里面也和firefox的解析是一样的了,说明firefox这样解析是有一定根据的。

其实假如我们把刚刚的html代码改成

1
2
3
那直接用childNodes不进行判断得到的结果就是正确的了,因为子div之间没有任何内容,也就不会产生我们不需要的子节点。