我查看了html源代码,没有 总结bobince,Kieron,Alohci和其他人在答案和评论中给出的出色解释: Firebug只显示已解析页面的DOM.由于复杂的HTML解析规则,DOM将与源HTML"不同"(在某种意义上). 在这种情况下,
此行为在HTML 4中指定.对于内容模型(允许儿童) 为了使事情更清楚,HTML 5定义了非常详细的解析规则,特别是对于这种情况:"当插入模式为"表格中"时,必须按如下方式处理令牌:[...]标签名称为1的开始标记of:"td","th","tr" - >表现为好像已经看到标签名为"tbody"的开始标记令牌,然后重新处理当前令牌. 它不是萤火虫,而是火狐那样做.这是表格应该与,但是当在HTML标签中通过firebug查看时,会
出现.知道为什么吗?
1> Nickolay..:
TBODY
DOM解析器添加DOM中的元素.请注意,这种奇怪的解析仅限于text/html文档,而在XHTML中,DOM与源XML紧密对应.
table
是(CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)
- tr
s的只允许在tbody
!规范说tbody
开始标记是可选的,这意味着如果HTML解析器tr
直接遇到table
它,它会插入tbody
作者省略的开始标记.
2> Kshitij Saxe..:元数据分开编写的方式,例如
Firefox只是在发现它们丢失时插入标记.
不是Firefox,而是Gecko:P
至于"为什么":表应该有一个`TBODY`,所以Firefox的内部工作*希望一个人在那里*.如果你没有明确指定它,它将自己创建它,因为它*希望一个人在那里*.即使你在地板上吃得很好,你也会被放在桌子上,因为服务员*想要一张桌子在那里*.; O)
不过,为什么这样做呢?
显然,标准可以双向阅读.事实是*元素*存在和*应该*被使用,但如果没有歧义,它的*声明可以被跳过*.*内部*浏览器总是假设它在那里,因为它使实现更容易.如果"它不必在那里"你的意思是"它*明确的声明*可以被跳过",那么我同意.*element*虽然应该总是隐含在那里,而这正是你在Firebug中看到的.不要将标记与解释结果混淆.
很好地回顾标准解释.类似于常年:必须
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有