【问题标题】:HTML Tables - can I have an additional tbody before the thead?HTML 表格 - 我可以在thead 之前有一个额外的 tbody 吗?
【发布时间】:2019-02-04 16:08:12
【问题描述】:

我需要在表格顶部添加一些与所述表格的列一致的元素。

此表包含一个<thead>(由于 jquery.tablesorter 插件,这是必需的)。我假设如果我将另一个<tbody> 放在<thead> 的顶部,我将能够使这些元素与其余列保持一致,但是chrome 和firefox 都会在<thead> 下方渲染每个<tbody>

例子:

<table>
    <tbody>
        <tr>
            <td>1</td><td>1</td><td>1</td>
        </tr>
    </tbody>
    <thead>
        <tr>
            <th>head</th><th>head</th><th>head</th>
        </tr>
    </thead>        
    <tbody>
        <tr>
            <td>2</td><td>2</td><td>2</td>
        </tr>
        <tr>
            <td>3</td><td>3</td><td>3</td>
        </tr>
        <tr>
            <td>4</td><td>4</td><td>4</td>
        </tr>
    </tbody>
</table>

虽然我理解这一点,但我仍然需要找到一种方法让这些元素与特定列保持一致。

【问题讨论】:

  • 你可以使用&lt;tfoot&gt;吗?或者您可以使用当前表格上方的另一个表格并使列固定宽度?或者如果它们不能固定宽度,使用 JS 动态调整它们的大小?
  • tfoot 不会一直放在底部吗?
  • 我需要在顶部的元素将位于最后 4 列固定宽度的顶部。所以我可以把 div 放在右边,让它看起来像是它的一部分。我正在尝试将其保留在表格中,因为我想使用列索引。
  • &lt;thead&gt; 中可以有多行 - 这是一个选项吗?
  • 哦,天哪,我已经习惯了单行标题,我什至没有想到它。是的,我可以使用它。您可以将其发布为答案。谢谢你让我觉得自己像个白痴:(:P

标签: html html-table


【解决方案1】:

您可以像这样在&lt;thead&gt; 中使用多行:-

<table>

   <thead>

     <tr> <td>1</td> <td>1</td> </tr>

     <tr> <td>head</td> <td>head</td> </tr>

   </thead>

</table>

【讨论】:

    【解决方案2】:

    我建议您使用 id (#) 标记来标识您希望 js 处理的部分并让 js 使用该 id。

    这样,thead 在前,tbody 在后。

    您所描述的变体可能有效-在您现在使用的浏览器中,在您还可以的操作系统上-并且可能符合特定版本的 HTML 规范-但是以不寻常的顺序排列是(根据我的经验)只是那种在任何地方都不能工作或工作相同的事情,最终会导致很多挫败感,尤其是当网站变得越来越复杂时。

    【讨论】:

      【解决方案3】:

      一种解决方案是在您的头中使用一个 tr 内的另一个表。虽然,这是一个完全丑陋的解决方案。

      您还可以使用 CSS 在表格上方放置一个 div。

      【讨论】:

      • 每张桌子允许我有多个 tbody。表中的大多数列都没有固定宽度,但我想我最终可能会这样做。如果没有其他办法。
      • 根据 HTML4 规范允许多个 &lt;tbody&gt;s:- w3.org/TR/html401/struct/tables.html#h-11.2.3
      【解决方案4】:

      正确的表结构是:

      <table>
          <thead>
              <tr>
                  <th></th>
                  <th></th>
              </tr>
          </thead>
          <tbody>
              <tr>
                  <td></td>
                  <td></td>
              </tr>
          </tbody>
          <tfoot>
              <tr>
                  <th></th>
                  <th></th>
              </tr>
          </tfoot>
      </table>
      

      &lt;thead&gt; 将始终位于顶部,&lt;tfoot&gt; 将始终位于底部。


      使用jQuery,您可以通过以下方式交换&lt;thead&gt;&lt;tbody&gt; 内容:

      $(document).ready(function() {
          $('#myTrigger').click(function() {
              var top = $('thead').html();
              var mid = $('tbody').html();
              $('thead').html(mid);
              $('tbody').html(top);
          });
      });
      

      【讨论】:

      • 这不是问题的答案。这是对“应如何在 HTML 中正确形成表格”的答案 - 一个不同的问题。
      • @MichaelDurrant 我的意思是,如果在示例中存在三个行块:&lt;tbody&gt;&lt;thead&gt;&lt;tbody&gt;,那么可以通过将它们更改为 &lt;thead&gt; 来定位它们, &lt;tbody&gt;&lt;tfoot&gt;。 :) 但是,由于标记的原因,这可能不是很好,因为在&lt;thead&gt; 中将存储实际的“tbody”行。
      • 是的,它们可以重新定位,但是js问题(定位关闭的原因..)呢?
      • @MichaelDurrant 我添加了示例jQuery 代码。它应该在&lt;thead&gt;&lt;tbody&gt; 之间交换行。
      猜你喜欢
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 2014-08-18
      • 2011-03-05
      相关资源
      最近更新 更多