当前位置: 代码迷 >> Web前端 >> childNodes属性
  详细解决方案

childNodes属性

热度:217   发布时间:2012-11-25 11:44:31.0
childNodes属性?
关于childNodes属性的问题?
/*html代码*/
<body>
<h1>Snapshots</h1>
<ul>
<li>
<a href="#">Fireworks</a>
</li>

</ul>
<img id="placeholder" src="images/placeholder.gif" alt="my image gallery"/>
</body>
/*js*/
function countBodyChildren(){
var body_element=document.getElementsByTagName("body")[0];
alert (body_element.childNodes.length);
}

得出的body子元素的个数为4

不应该是3吗?

测得,h1 ul 匀为1,而img却占2????为什么?

又测了input也和img的情况一样

1 楼 afcn0 2007-10-29  
不要闹,你在ff下看看还是8个了,那你是不是要疯了,呵呵
其实很简单,script也算入body元素的,所以是4个,ff是8个是因为textNode也是节点,不要连续使用多个"?",使人看着不爽
2 楼 christinanj 2007-10-29  
哦,改过来了

我用的是IE6

测得四个子元素的name为别为h1 ul img undifined

而把img删除时,子元素的个数为2

把img替换成input也和img时情况一样,子元素个数为4

3 楼 afcn0 2007-10-30  
这样吧,你在函数里这么写
alert (body_element.childNodes[3].outerHTML); 

看看最后一个元素是什么就ok了
4 楼 niuyuewanzi 2007-11-01  
afcn0 写道
不要闹,你在ff下看看还是8个了,那你是不是要疯了,呵呵
其实很简单,script也算入body元素的,所以是4个,ff是8个是因为textNode也是节点,不要连续使用多个"?",使人看着不爽


前部分说的是没错的,但是这就是唯一的原因,BODY本身是不可能被算在内的.因为BODY的CHILD中不可能包含BODY自己.

为什么?原来本以为是3个ELEMENTS(IE中),现在是4个,前3个分别为H1,UL,IMG,最后一个是什么

运行alert(document.getElementsByTagName('body')(0).childNodes[3].nodeName)
RETURN ==> #text ,是个TEXT NODE. 把后面所有回车行合并为1行里就没问题了...

5 楼 afcn0 2007-11-01  
其实此问题需要仔细研究下,一般ff在元素之间只要有空格就会看成是childNode,但是ie好象很奇怪,一般元素之间的空格回车都不算text节点,只有比如img元素后面有空格回车的算文本节点,我说的最后一个是script,是写个<script>在里面,虽然在body外面,但是ie也会把script弄进body里面去