为什么浏览器会将tbody元素插入表元素中?

Chr*_*sma 57 html xhtml

我正在玩一些使用原始html和JQuery的想法.我做的一件事是创建一个包含一组行的表元素.

<table id="MyTable" >
    <tr>
        <td>Title</td>
    </tr>
    <tr>
        <td>1</td>
    </tr>
    <tr>
        <td>2</td>
    </tr>
    <tr>
        <td>3</td>
    </tr>
    <tr>
        <td>4</td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

但是,当我在FireFox + Firebug,IE8开发人员工具栏或Google Chrome JavaScript调试器中查看代码时......所有这些代码都显示了围绕所有tr节点的tbody元素.

我并不反对这种情况......但这是标准行为吗?

yst*_*sth 54

http://htmlhelp.com/reference/html40/tables/tbody.html:

TBODY元素定义表中的一组数据行.TABLE必须具有一个或多个TBODY元素,这些元素必须遵循可选的TFOOT.TBODY结束标记始终是可选的.当表只包含一个TBODY且没有THEAD或TFOOT时,start标记是可选的.

所以总有一个tbody(虽然有时候开始和结束标签都是可选的并且省略了),并且你正在使用的工具在向你显示它时是正确的.

另一方面,除非你明确地包含它们,否则thead或tfoot永远不会存在,如果你这样做,那么tbody也必须是明确的.

  • @Jack Douglas:不,在那个答案中链接的规范明确地说`<!ELEMENT TABLE - - (CAPTION?,(COL*| COLGROUP*),THEAD?,TFOOT?,TBODY +)>`和`<!ELEMENT TBODY OO(TR)+ - 表体 - >开始标记:可选,结束标记:可选` - 也就是说,表元素有一个或多个tbody元素(`TBODY +`)和tbody元素有一个可选的(隐含的,如果没有)指定)开始标记.不可否认,这与完全可选的TBODY并没有什么不同,但是**这个问题正是关于这个差异 - 它是否存在于DOM中,无论它是否出现在html文本中. (4认同)

Mat*_*hen 13

是的,tbody是表示表格主体的标准元素.它不需要将它放在标记中,但它将包含在DOM中,如您所见.

  • 为什么不是thead/tfoot?好吧,因为他们不需要渲染一个像tbody那样的表. (2认同)