代码如下:
<ul id="u1">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<div>6</div>
</ul>理论上:UL 元素下有6个儿子,5个LI,1一个DIV,但是:在IE中,alert(document.getElementById("u1").childNodes.length);输出值为5,且代码解析后会变成如下:
<UL>
<LI>1 
<LI>2 
<LI>3 
<LI>4 
<LI>5 
<DIV>6</DIV></LI>
</UL>
很明显,在IE下,自动的帮LI去除了封口,仅仅在最后一个加上了</LI>,而且他把最后一个元素加到了最后一个li中,这样导致在检测UL下有多少元素时,根本检测不对了。这个问题,不知道是和我引用的标准有关,还是有没有其他原因,或者是IE的问题?暂不清楚,不知道大家有没有遇到!而在FF中,如上代码 alert(document.getElementById("u1").childNodes.length);输出值却是13;
原因是,这种格式
<ul id="u1">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<div>6</div>
</ul>
存在换行,FF会认为也是一个元素,虽然你在代码中没有写,所以,写成
<ul id="u1"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><div>6</div></ul>
就OK了,输出子元素个数6,且代码解析之后,仍然和源码是相同的!

解决方案 »

  1.   

    遇到过,IE下通过outerHTML获取出来的单个<li>标签都会缺少</li>,当时没有搞清楚,搭车同求高人解惑一下。
      

  2.   

    这是UL中直接嵌套非LI的问题。<ul id="u1">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <div>6</div>
    </ul>对于这种错误的嵌套,IE中会将没有在LI中的元素,自动的被离他近的LI元素包含所以,解析完之后,在IE中就变成了:
    <ul id="u1">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <div>6</div></li>
    </ul>不只是DIV,其他元素也会被包到LI中。
    而Firefox则不会那样处理。
      

  3.   

    学习,还没研究过。看来还是浏览器的兼容性问题。
    看来ul最好不要放其他的标签,就像table中只放tr、tr中放td,而不能table嵌套div什么的
      

  4.   

    这种嵌套方法应该算是错误的,IE和FF内核机制不同,处理的方法肯定有差异。IE肯定算的是ul里的li元素的长度。不过这种情况还不太清楚,貌似IE会自动兼容一些错误,就会引发一些问题。同样求高人指点。
      

  5.   

    标准情况,UL是不允许嵌套除LI外的元素的(LI默认且唯一),你的写法浏览会自动解析成你看到的代码。但是由于使用的原因,FF在2.0版本后就对这个问题做了兼容。而IE没有。