根据HTML DTD,这是 HTML 表格的内容模型:
<!ELEMENT TABLE - -
(CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)>
<!ELEMENT CAPTION - - (%inline;)* -- table caption -->
<!ELEMENT THEAD - O (TR)+ -- table header -->
<!ELEMENT TFOOT - O (TR)+ -- table footer -->
<!ELEMENT TBODY O O (TR)+ -- table body -->
<!ELEMENT COLGROUP - O (COL)* -- table column group -->
<!ELEMENT COL - O EMPTY -- table column -->
<!ELEMENT TR - O (TH|TD)+ -- table row -->
<!ELEMENT (TH|TD) - O (%flow;)* -- table header cell, table data cell-->
所以这是非法的语法:
<thead><th>Heading of table</th></thead>
应该是:
<thead><tr><th>Heading of table</th></tr></thead>
<th> 元素在任何地方都不需要。它们只是您可以在表格行中使用的两种单元格类型之一(另一种是<td>)。 <thead> 是一个可选的表部分,可以包含一个或多个行。
编辑:至于为什么使用<thead>有几个原因:
-
语义:您在区分表格内容和“元数据”。这最常用于区分列标题和数据行;
-
辅助功能:帮助使用屏幕阅读器的人理解表格的内容;
-
非屏幕媒体:打印多页表格可以让您将
<thead> 内容放在每一页的顶部,这样人们就可以理解这些列的含义,而无需翻回几页;李>
-
样式: CSS 可以应用于
<tbody> 元素、<thead> 元素,两者或其他组合。它为您提供了其他东西来编写选择器;
-
Javascript: 这在使用 jQuery 和类似库时经常出现。额外的信息有助于编写代码。
作为 (5) 的示例,您可以这样做:
$("table > tbody > tr:nth-child(odd)").addClass("odd");
<thead> 元素意味着这些行不会以这种方式设置样式。或者你可以这样做:
$("table > tbody > tr").hover(function() {
$(this).addClass("hover");
}, function() {
$(this).removeClass("hover");
});
与:
tr.hover { background: yellow; }
这又排除了<thead> 行。
最后,许多相同的论点适用于使用<th> 元素而不是<td> 元素:您表示此单元格不是数据,而是某种标题。通常,这些单元格会在<thead> 部分中的一行或多行中组合在一起,或者根据表格的结构和性质,成为每行中的第一个单元格。