在html页面的body标签下放了个img标签,然后我想试着查找下body元素的子元素,代码如下
function countBodyChildren() 
  { 
 
       var body_element=document.getElementsByTagName("body")[0];
       alert(body_element.childNodes.length); 
    }window.onload=countBodyChildren;
跳出的对话框显示的body元素的子元素为2,可我在html页面就放了一个img标签在body下,不是应该为1吗?刚学这个,比较菜,请大家帮帮忙,多谢了!
 

解决方案 »

  1.   

    因为每个标签都是(包括img)<></>这种形式的,而这种形式都会至少有一个文本节点,那怕这个文本点没有值
      

  2.   

    学会使用各种firebug IE develop tools safari chrome inspect element
      

  3.   

    childnodes在不同浏览器下取到的东西不一样
    LZ可以在各浏览器下调试,alert nodeType就知道了。
    FF下计算文本节点(包括换行)
      

  4.   

    首先 空节点也是节点,所以你这样的查找是不正确的。
    需要通过一定的遍历来判断nodetype。
    既然初学,我给你思路,你去找,你会有很大收获的首先你要知道节点分类,可以由nodetype来查看
    其次你要知道ff和ie等不同浏览器下对空节点的解释不同
    再次document.getElementsByTagName("body")其实不是一个好的search方式。你可以找找看更好的实现。
      

  5.   

    我是在ie下调的,我发现只放一个img标签就算两个,如果只放一个div,或者只放一个h1 ,就只算一个,这是怎么回事?有什么说法没?我试了下nodeType为1,也就是是元素节点,可我就放一个img标签,就像这样 <img /> 什么属性都没设置,也为2,把我都给搞糊涂了
      

  6.   

    经测试,<input />也有这种现象,在IE下这些元素的后一个元素是#text,但是<br />却没有,我猜是因为像这些需要包含内容实体的元素都会附带一个文本元素,比如img它表示一个图片,是img和图片的组合,input表示input元素和它指代类型的组合,瞎猜的,求高手解答
      

  7.   

    我想遍历下body子元素的标签名所以加了几行代码
    var body_element=document.getElementsByTagName("body")[0];
           alert(body_element.childNodes[0].tagName); 
           alert(body_element.childNodes[1].tagName); 
           alert(body_element.childNodes.length); 
           alert(body_element.nodeType);
        结果是显示子元素的个数为2,第一个子元素的tagName为IMG,第二个子元素的tagName显示为undefined,nodetype为1,这说明节点类型为元素节点,那第二个子元素是什么?我已经把html页面代码改成了这样
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
      
      <title>Image Gallery</title>
    <script type="text/javascript" src="scripts/showPic.js"></script>
    </head>
    <body><img /></body>
    </html>
      

  8.   

    所有自认为JS很牛的人,在这个问题面前,都显得渺小了。
    友情UP