我查看了HTML源代码,没有发现<tbody>
标签,但是当我在HTML选项卡下使用Firebug查看时,<tbody>
标签出现了。你知道这是为什么吗?
我查看了HTML源代码,没有发现<tbody>
标签,但是当我在HTML选项卡下使用Firebug查看时,<tbody>
标签出现了。你知道这是为什么吗?
总结bobince、Kieron、Alohci等人在回答和评论中提供的优秀解释:
TBODY
元素是由HTML解析器添加的。请注意,这种奇怪的解析仅限于text/html文档,在XHTML中,DOM与源XML非常相似。
table
的内容模型(允许的子项)是(CAPTION?,(COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)
-- tr
只允许在tbody
中!规范指出,tbody
的开始标记是可选的,这意味着如果HTML解析器直接在table
中遇到tr
,它会插入作者省略的tbody
开始标记。这不是Firebug,而是Firefox的行为。这是表格应该编写的方式,<TBODY>
应该与元数据(如<COLGROUP>
)分开。当Firefox发现缺少<TBODY>
标签时,它会自动插入。
TBODY
,因此 Firefox 内部机制希望有一个存在。如果你没有明确指定它,它会自己创建它,因为它希望有一个存在。即使你愿意在地板上吃饭,服务员也会让你坐在桌子旁边,因为他想要有一张桌子在那里。;o) - decezeTABLE
元素实际上不允许直接包含TR
元素,它们必须包含在THEAD
、TFOOT
或TBODY
元素中。但为了简单和向后兼容性,当表格仅包含一个表主体且没有表头或表脚部分时,可以省略TBODY
的开始标签,此时浏览器会自动推断该元素。
table
的内容模型为(CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)
;请注意,其中并没有包括tr
。这就像当你忘记了<body>
标签时,解析器会在你使用类似于<div>
的必须出现在body
中的元素时暗示它的存在。 - bobince(tbody+|tr+)
:您可以使用tbodies或裸露的trs,但不能混合使用。在作为XML解析模式提供服务时,Firefox不应添加隐含的tbody
元素。 - bobinceиҝҷдёҚжҳҜз”ұFirebugж·»еҠ зҡ„пјҢиҖҢжҳҜз”ұFirefoxж·»еҠ зҡ„гҖӮFirebugеҸӘдјҡжҳҫзӨәе®һйҷ…зҡ„DOMз»“жһ„гҖӮеҰӮжһңдҪ жөҸи§Ҳеҗ„дёӘDOMе…ғзҙ пјҢдҪ дјҡжіЁж„ҸеҲ°Firefoxд№ҹж·»еҠ дәҶдёҖдәӣиҮӘе·ұзҡ„ж ·ејҸе…ғзҙ гҖӮ
A.19. 显式元素
在表格中使用显式tbody元素。
原因:虽然table元素的内容模型允许跳过tbody元素,但在HTML 4中,该元素是隐含的。 HTML 4用户代理将默默添加此元素,从而可能混淆脚本或样式表。
来源:http://www.w3.org/TR/2009/NOTE-xhtml-media-types-20090116/#compatGuidelines