如果你没有明确地使用thead和tbody,为什么浏览器不会寻找第一个“内容行”添加“tbody”?

时间:2014-01-04 22:57:05

标签: jquery html-table

当我查看W3schoool the initial tutorial或示例时,请不要使用thead或tbody,但我的jQuery代码如下所示:

$("#mytable tbody tr:nth-child(odd)").addClass("oddColor");

$("#mytable tr:nth-child(odd)").addClass("oddColor");

我的表看起来像这样(注意没有thead或tbody标签)

<table>
  <tr><th>Col1</th><th>Col2</th></tr>

  <tr><td>Row 1</td><td>Row 1</td></tr>
  <tr><td>Row 2</td><td>Row 2</td></tr>
  <tr><td>Row 3</td><td>Row 3</td></tr>
  <tr><td>Row 4</td><td>Row 4</td></tr>
</table>

jQuery会计算&#34; th&#34;像tbody一样?如果浏览器自动添加tbody,为什么他们不把它放在&#34; td&#34;行(而不是&#34; th&#34;行) 它看起来确实如此,但我认为它会寻找第一个&#34; td&#34;行。

显然,通过在所有表上添加thead和tbody使其100%显式,但我只是被jQuery在那些标签不存在时所做的以及为什么它表现得那样感到困惑。

也许更好的问题是,如果浏览器添加tbody,为什么他们不会在td行而不是第t行添加tbody?

2 个答案:

答案 0 :(得分:2)

如果未明确使用tbodytbody,则会自动创建

thead并包装所有表行。在正文行中允许th,没有“检查”行的内容以查看哪些行应该是行或主体行。

如果您希望thead排除tbody之外的行,则必须明确添加 - 此时您还需要添加tbody

请参阅Why do browsers insert tbody element into table elements?

答案 1 :(得分:0)

RFC1942 (HTML Tables),自1996年起,Dave Raggett说

  

表格可分为头部和身体部分。 THEAD和TFOOT元素是可选的,但总是需要一个或多个TBODY元素。如果表只包含TBODY部分,则可以省略TBODY开始和结束标记,因为解析器可以推断它们。如果存在THEAD元素,则需要THEAD开始标记,但如果后面是TFOOT或TBODY开始标记,则可以省略结束标记。这同样适用于TFOOT。

     

注意:此定义提供了与为旧模型创建的表的兼容性,以及允许省略THEAD,TFOOT和TBODY的结束标记。(我的重点)

     

THEAD,TFOOT和TBODY元素提供了一种控制渲染的便捷方法。如果表在主体中有大量行,则用户代理可以选择对表主体部分使用滚动区域。渲染到分页设备时,通常必须跨页面边界分割表格。 THEAD,TFOOT和TBODY元素允许用户代理重复当前页面底部的桌脚,然后在继续使用表格主体之前将表头放在新页面的顶部。

"older model" appears in HTML 3.0。虽然HTML 3.0在完成之前就已经放弃了,有利于HTML 3.2,但似乎至少在网络上创建了一些表格。它说:

  

内容模型:可选CAPTION,然后是一个或多个表行(TR)

即。当时没有TBODY,THEAD或TFOOT元素。

因此,假设那些在那时创建的表将期望所有行,无论它们是否包含TH元素或TD元素都具有类似TBODY的行为,例如这些行不会在每个打印页面的顶部和底部重复,分别是THEAD和TFOOT预期的。

因此,为了向后兼容,只使用TBODY包装与HTML表的原始用法一致。