为什么firebug将<tbody>添加到<table>?

Mas*_*ask 30 html firebug dom

我查看了html源代码,没有<tbody>,但是当在HTML标签中通过firebug查看时,会<tbody>出现.知道为什么吗?

Nic*_*lay 20

总结bobince,Kieron,Alohci和其他人在答案和评论中给出的出色解释:

  1. Firebug只显示已解析页面的DOM.由于复杂的HTML解析规则,DOM将与源HTML"不同"(在某种意义上).
  2. 在这种情况下,TBODYDOM解析器添加DOM中的元素.请注意,这种奇怪的解析仅限于text/html文档,而在XHTML中,DOM与源XML紧密对应.
    • 此行为在HTML 4中指定.对于内容模型(允许儿童)table(CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)- trs的只允许在tbody!规范说tbody开始标记是可选的,这意味着如果HTML解析器tr直接遇到table它,它会插入tbody作者省略的开始标记.
    • 为了使事情更清楚,HTML 5定义了非常详细的解析规则,特别是对于这种情况:"当插入模式为"表格中"时,必须按如下方式处理令牌:[...]标签名称为1的开始标记of:"td","th","tr" - >表现为好像已经看到标签名为"tbody"的开始标记令牌,然后重新处理当前令牌.


Ksh*_*KJ- 6

它不是萤火虫,而是火狐那样做.这是表格应该与<TBODY>元数据分开编写的方式,例如<COLGROUP>Firefox只是<TBODY>在发现它们丢失时插入标记.

  • 不是Firefox,而是Gecko:P (8认同)
  • 至于"为什么":表应该有一个`TBODY`,所以Firefox的内部工作*希望一个人在那里*.如果你没有明确指定它,它将自己创建它,因为它*希望一个人在那里*.即使你在地板上吃得很好,你也会被放在桌子上,因为服务员*想要一张桌子在那里*.; O) (8认同)
  • 不过,为什么这样做呢? (4认同)
  • 显然,标准可以双向阅读.事实是*元素*存在和*应该*被使用,但如果没有歧义,它的*声明可以被跳过*.*内部*浏览器总是假设它在那里,因为它使实现更容易.如果"它不必在那里"你的意思是"它*明确的声明*可以被跳过",那么我同意.*element*虽然应该总是隐含在那里,而这正是你在Firebug中看到的.不要将标记与解释结果混淆. (2认同)
  • 很好地回顾标准解释.类似于常年:必须<TPAIN>总是被<AUTOTUNE>包裹?;) (2认同)