便便代码人生

关注技术, 偶尔动动手

[原] IE和Firefox在DOM解析childNodes上的不同

Posted by bianbian on 2006-09-07 18:25

本文Tags: , ,

一个问题困扰我,涉及到firstChild和lastChild的代码工作不正常。为了简单,我把问题抽象到下面这个代码,你猜点击按钮后的结果是什么?

  1. <html><body>
  2. <UL id="main">
  3.   <LI>1</LI>
  4.   <LI>2</LI>
  5. </UL>
  6. <input type=button value="click me!"
  7.   onclick="alert(document.getElementById('main').childNodes.length)">
  8. </body></html>

呵呵,在IE里提示2,在Firefox里提示5,这是怎么回事呢?UL下明明只有两个子节点,Firefox为什么提示5个子节点呢?通过查看IE和firefox的DOM结构,发现了问题的所在:
IE:IE Firefox:firefox
你也应该发现了吧?“#text”表示文本(实际是无意义的空格和换行等)在Firefox里也会被解析成一个节点,在IE里只有有实际意义的文本才会解析成“#text”。所以对firefox而言,上例中UL的fistChild并不是第一个LI,而是#text(UL和第一个LI之间的无意义文本),lastChild也并不是最后一个LI,而是最后一个LI和/UL之间的无意义文本。

解决办法是先用 .getElementsByTagName(”LI”) 得到所有LI的节点。我觉得firefox这样处理比较令程序员头痛,也没有必要。

标签: , ,

遵守创作共用协议,转载请链接形式注明来自http://bianbian.org 做人要厚道

相关日志

4 Responses to “[原] IE和Firefox在DOM解析childNodes上的不同”

  1. firefox Says:

    不错!谢谢博主!解决了我一个大问题!

  2. Jeremy_wu Says:

    很感谢,这个问题的确很莫名,谢谢指教。

  3. ots.nixius Says:

    我也发现这个问题了
    我用Cobra解析HTML文档,发现解析出来的DOM树和Firefox的不一样。
    唉唉。。。
    就这样用吧

    另外我比较好奇Firefox的DOM Inspector上的一个功能,就是点击网页,自动定位到DOM树的节点,不知道怎么实现的。
    刚接触DOM不久,不知道您能不能给我解惑。
    我用的java做项目。

  4. MichaelZyy Says:

    我觉得firefox这样处理比较令程序员头痛,也没有必要。

    不能那么说

    这个是W3C对于DOM解析的规定 :)

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

(required)