【问题标题】:Is it necessary to have <tbody> in every table?是否有必要在每个表中都有 <tbody> ?
【发布时间】:2011-03-05 22:05:13
【问题描述】:

是否有必要在每个表中都有&lt;tbody&gt;?符合标准。

【问题讨论】:

标签: xhtml w3c semantic-markup w3c-validation


【解决方案1】:

根据HTML 3.2 spectable 不在 HTML 2 规范中)table 元素没有 tbodytheadtfoot(它们是 HTML 4 的东西),只有可选的 @ 987654327@ 和tr / th 的列表。

虽然您可能会认为您在谈论 1997 年和 2021 年的 HTML 3.2 到底是什么鬼,但考虑使用原始或过时 HTML 引擎的电子邮件客户端,tbody 在这里毫无意义。

【讨论】:

    【解决方案2】:

    Dumb Guy 给了an answer for HTML4)。 Arwym 给an answer for HTML5 to a related question):

    tabular data spec for HTML5 不需要它们:

    可以使用此元素 (tr) 的上下文:

    • 作为thead 元素的子元素。
    • 作为tbody 元素的子元素。
    • 作为tfoot 元素的子元素。
    • 作为table 元素的子元素,在任何captioncolgroupthead 元素之后,但前提是没有tbody 作为表格元素的子元素的元素

    尽管我认为划分行是一个好习惯 在theadtbodytfoot 标记内,因为它使表格的行 更容易识别。

    最后,浏览器总会为你添加至少tbody

    【讨论】:

      【解决方案3】:

      对于仍在使用 IE7 的一小部分用户,如果您要使用 DOM 方法构建表,则必须添加将 tr 封装在 tbody 标记中!

      这适用于所有主流浏览器:

      var table = document.createElement('table');
      var tbody = document.createElement('tbody');
      var tr = document.createElement('tr');
      tbody.appendChild(tr);
      table.appendChild(tbody);
      

      这在 IE7 中不起作用:

      var table = document.createElement('table');
      var tr = document.createElement('tr');
      table.appendChild(tr);
      

      我关于构建表的快速博客文章:
      http://blog.svidgen.com/2012/05/building-tables-in-ie7-with-javascript.html

      值得注意的是,我不再努力在自己的项目中支持 IE7。在这一点上,对于大多数网站来说,IE

      【讨论】:

        【解决方案4】:

        引用HTML 4 spec:“TBODY 开始标记始终是必需的,除非表格仅包含一个表格主体且没有表格头部或底部部分。TBODY 结束标记始终可以安全地省略。”

        所以,如果你有一个&lt;thead&gt;,你必须有一个&lt;tbody&gt;标签&lt;tfoot&gt;

        另见:MDN

        【讨论】:

          【解决方案5】:

          大多数浏览器都是宽容的,但即便如此,我还是在我现在使用的所有表格中添加了这对。即使是琐碎的桌子。尤其是现在我越来越多地使用 CSS 来装饰这些表格。

          话虽如此,我的旧表格仍然可以在最新的浏览器上正常工作。我正在努力学习,但从长远来看,我会花一些额外的微秒来在这里和那里添加可选标签,最终会为您节省金钱/时间。

          戴夫

          【讨论】:

          • 在表格中添加 tbody 标签如何为您节省金钱/时间?
          【解决方案6】:

          仅当您定义 theadtfoot 时。它主要用于表格具有多个内容主体的情况。如果表格中的数据很容易理解为tbody,那么您可以放心地省略它。

          【讨论】:

          • 并且&lt;th&gt; 是否允许在tbody tr 内部使用?
          • 从语义上讲,如果您的表格标题带有&lt;th&gt;,那么您应该使用&lt;thead&gt;,尽管您这样做不是必需。如果您将它们用作列的标题,则不应将它们放在tbody 中,但如果它们是行的标题,则可以。
          • @Aaron Harun - 我刚刚注意到,即使我们没有使用 &lt;thead&gt;&lt;tfoot&gt; 和多个 &lt;tbodies&gt;,Firefox 总是将 tbody 添加到表中
          • @metal-gear-solid - 不仅仅是 Firefox,在 text/html 序列化中,所有浏览器都会推断出缺少的 tbody 标签。当然,不在 application/xhtml+xml 序列化中。
          • @metal-gear-solid - 好不好是见仁见智的问题,取决于你个人的发展理念。我只能提供事实。这是不必要的,但是如果您想为您的网页提供两种 mime 类型,那么显式使用 tbody 意味着您的 DOM 可以具有相同的结构,而不管序列化如何。这可以使您的脚本更简单。
          猜你喜欢
          • 2011-01-17
          • 1970-01-01
          • 2016-11-26
          • 2011-03-24
          • 1970-01-01
          • 2018-02-11
          • 2014-07-14
          • 1970-01-01
          • 2015-04-28
          相关资源
          最近更新 更多