关于LI 的问题,知道的希望解释一下

jol_boy 2010-08-17 05:19:40
代码如下:
<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,且代码解析之后,仍然和源码是相同的!
...全文
262 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
啊兵 2010-08-20
  • 打赏
  • 举报
回复
长见识了
henrycomein 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 webadvocate 的回复:]
这是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<……
[/Quote]

3楼正解
avengercf 2010-08-20
  • 打赏
  • 举报
回复
标准情况,UL是不允许嵌套除LI外的元素的(LI默认且唯一),你的写法浏览会自动解析成你看到的代码。但是由于使用的原因,FF在2.0版本后就对这个问题做了兼容。而IE没有。
dxlzanjie 2010-08-20
  • 打赏
  • 举报
回复
学习中~~
jol_boy 2010-08-18
  • 打赏
  • 举报
回复
看来真是无解。。。
iopzxc 2010-08-18
  • 打赏
  • 举报
回复
这种嵌套方法应该算是错误的,IE和FF内核机制不同,处理的方法肯定有差异。IE肯定算的是ul里的li元素的长度。不过这种情况还不太清楚,貌似IE会自动兼容一些错误,就会引发一些问题。同样求高人指点。
hoojo 2010-08-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 jol_boy 的回复:]
代码如下:
<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);输……
[/Quote]
学习,还没研究过。看来还是浏览器的兼容性问题。
看来ul最好不要放其他的标签,就像table中只放tr、tr中放td,而不能table嵌套div什么的
WebAdvocate 2010-08-18
  • 打赏
  • 举报
回复
这是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则不会那样处理。

lzh_me 2010-08-17
  • 打赏
  • 举报
回复
遇到过,IE下通过outerHTML获取出来的单个<li>标签都会缺少</li>,当时没有搞清楚,搭车同求高人解惑一下。

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧