【问题标题】:How can I delete all the <tr> elements (except the first one) in a HTML table如何删除 HTML 表格中的所有 <tr> 元素(第一个元素除外)
【发布时间】:2017-12-09 21:51:31
【问题描述】:

假设我有一张这样的桌子:

<table id="datatable1">
  <tr>
    <th>Header column 1</th>
    <th>Header column 2</th>
  </tr>
  <!-- Remove everything from here down until </table> -->
  <tr>
    <td>Data row 1, column 1</td>
    <td>Data row 1, column 2</td>
  </tr>
  <tr>
    <td>Data row 2, column 1</td>
    <td>Data row 2, column 2</td>
  </tr>
</table>

正如评论所说,我想删除标题行下方的每一行。或者,用更专业的术语来说,我想删除评论中的每个元素,直到结束表标记。

我不想使用 jQuery,所以这个问题与 Stack Overflow 上的其他问题不同。我尝试了一些纯 JS 解决方案(这正是我想要的),但它们太复杂了,我无法理解它!

感谢您的帮助。

到目前为止,我已经从另一个教程中尝试过这个,但它说'无法读取未定义的属性'长度':

function clearTable(table) {
    var rows = table.rows;
    var i = rows.length;
    while (--i) {
        rows[i].parentNode.removeChild(rows[i]);
        // or
        // table.deleteRow(i);
    }
}

【问题讨论】:

  • 请发布您到目前为止所尝试的内容
  • 尝试 tbody{display:none} 或 tbody > tr{display:none}

标签: javascript html html-table


【解决方案1】:

删除第二个元素,直到只剩下一个元素:

var table = document.getElementById("datatable1");

while (table.rows.length > 1) {
  table.deleteRow(1);
}
<table id="datatable1">
  <tr>
    <th>Header column 1</th>
    <th>Header column 2</th>
  </tr>
  <!-- Remove everything from here down until </table> -->
  <tr>
    <td>Data row 1, column 1</td>
    <td>Data row 1, column 2</td>
  </tr>
  <tr>
    <td>Data row 2, column 1</td>
    <td>Data row 2, column 2</td>
  </tr>
</table>

【讨论】:

  • 如果我的页面上有另一个表格我想保持不变,这种方法是否仍然有效?
  • @S.Jones 将 id 添加到您要修改的表中,以便更容易定位
  • @Huangism 我将如何编辑此答案中的 Javascript 以适应这种情况?
  • @S. Jones &lt;table id="foo"&gt; ... &lt;/table&gt; 并将第一行替换为 var table = document.getElementById("foo").children[0];
  • Sumeet 的回答也得到了带有 ID 的表
【解决方案2】:

您可以获取第一个 tr 并将其替换为所有表体。

var mytbl = document.getElementById("table1");
mytbl.getElementsByTagName("tbody")[0].innerHTML = mytbl.rows[0].innerHTML;
<table id="table1">
  <tr>
    <th>Header column 1</th>
    <th>Header column 2</th>
  </tr>
  <!-- Remove everything from here down until </table> -->
  <tr>
    <td>Data row 1, column 1</td>
    <td>Data row 1, column 2</td>
  </tr>
  <tr>
    <td>Data row 2, column 1</td>
    <td>Data row 2, column 2</td>
  </tr>
</table>

【讨论】:

  • 你能解释一下 tbody 是从哪里来的吗?
  • 不是来自您的原始代码,您可以将 tbody 替换为 table
  • @S.Jones 现在大多数浏览器都会自动插入它。你仍然可以选择它。
  • 是的,tbody 是表示表格主体的标准元素。不需要放在标记中,但会被浏览器包含在 DOM 中
【解决方案3】:

如果你愿意,你可以用 CSS 来做。 tr+tr 选择除第一行之外的所有行。

tr + tr {
  display: none;
}
<table>
  <tr>
    <th>Header column 1</th>
    <th>Header column 2</th>
  </tr>
  <!-- Remove everything from here down until </table> -->
  <tr>
    <td>Data row 1, column 1</td>
    <td>Data row 1, column 2</td>
  </tr>
  <tr>
    <td>Data row 2, column 1</td>
    <td>Data row 2, column 2</td>
  </tr>
</table>

【讨论】:

  • 这只是隐藏它们而不是删除它们
  • @Huangism 确实,但他将问题标记为“CSS”,所以谁知道他想要什么。他们在视觉上消失了。其他人已经发布了 JS 解决方案。
  • 好吧,OP 确实说 I tried some of the pure JS solutions (which is what I want) 标题对删除很清楚,但肯定隐藏它们就足够了
猜你喜欢
  • 2013-09-23
  • 2017-01-23
  • 2012-05-14
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
相关资源
最近更新 更多