jQuery删除除第一行之外的所有表行

Posted

技术标签:

【中文标题】jQuery删除除第一行之外的所有表行【英文标题】:jQuery delete all table rows except first 【发布时间】:2010-09-27 01:37:54 【问题描述】:

使用 jQuery,如何删除表中除第一行之外的所有行?这是我第一次尝试使用索引选择器。如果我正确理解了这些示例,则以下内容应该有效:

$(some table selector).remove("tr:gt(0)");

我将其读作“在 jQuery 对象中包装一些表,然后删除这些行的元素索引大于零的所有 'tr' 元素(行)”。实际上,它执行时不会产生错误,但不会从表中删除任何行。

我缺少什么,我该如何解决?当然,我可以直接使用 javascript,但是我对 jQuery 非常感兴趣,所以我想使用 jQuery 来解决这个问题。

【问题讨论】:

任何人都知道为什么给定的代码不起作用?将过滤器选择器放入删除功能时我也遇到问题 现在我对这一点有了更好的理解,上面的代码不起作用,因为 $(some table selector) 只选择 table 元素,而不选择它的任何子元素,所以没有 'tr' 元素要查找的删除功能。使用 find 函数在表格元素的子元素中搜索匹配项。 看这个答案***.com/questions/4831334/… 【参考方案1】:

这应该有效:

$(document).ready(function() 
   $("someTableSelector").find("tr:gt(0)").remove();
);

【讨论】:

如果我想删除除 first 和 seconde 之外的表行怎么办? @user594166 使用 gt(1) 而不是 gt(0)。 来自 jQuery 网站:Because :gt() is a jQuery extension and not part of the CSS specification, queries using :gt() cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use $("your-pure-css-selector").slice(index) instead. 我建议使用 $("#mytable > tr").slice(1).remove(); 您的代码对我不起作用..我将 gt(0) 更改为 gt(1) 并且这有效。【参考方案2】:

考虑到意图,我认为这更具可读性:

$('someTableSelector').children( 'tr:not(:first)' ).remove();

通过限制搜索的深度,使用子元素还可以处理第一行包含表格的情况。

如果你有一个 TBODY 元素,你可以这样做:

$("someTableSelector > tbody:last").children().remove();

如果你有 THEAD 或 TFOOT 元素,你需要做一些不同的事情。

【讨论】:

re: 做点不一样的事.... 这行得通:$('someTableSelector > tbody:last > tr:not(:first)').remove(); 要删除所有孩子,我必须使用双引号。不然没认出来。 $("#tasks").children().remove();【参考方案3】:

实现此目的的另一种方法是使用 jQuery 的 empty() 函数和表中的 thead 和 tbody 元素。

表格示例:

<table id="tableId">
<thead>
    <tr><th>Col1</th><th>Col2</th></tr>
</thead>
<tbody>
    <tr><td>some</td><td>content</td></tr>
    <tr><td>to be</td><td>removed</td></tr>
</tbody>
</table>

还有 jQuery 命令:

$("#tableId > tbody").empty();

这将删除表格的 tbody 元素中包含的每一行,并将 thead 元素保留在标题应位于的位置。当您只想刷新表格的内容时,它会很有用。

【讨论】:

这可能是所有提供的解决方案中性能最好的,而且非常优雅。【参考方案4】:

如果是我,我可能会把它归结为一个选择器:

$('someTableSelector tr:not(:first)').remove();

【讨论】:

同意,但更具体的必须说:$('someTableSelector tbody tr:not(:first)').remove();【参考方案5】:

您的选择器不需要在您的移除中。

它应该看起来像:

$("#tableID tr:gt(0)").remove();

这意味着选择表中 ID 为 tableID 的除第一行之外的每一行,并将它们从 DOM 中删除。

【讨论】:

我同意。在我的例子中,表格对象之前已被选中。 删除除第一行以外的所有行:- $("#tableID tr:gt(1)").remove();【参考方案6】:
$('#table tr').slice(1).remove();

我记得遇到“切片”比所有其他方法都快,所以就把它放在这里。

【讨论】:

有些对我不起作用。接受的答案似乎可以解决问题。 gt 已弃用,这是最好的答案。【参考方案7】:

考虑一个 ID 为 tbl 的表:jQuery 代码将是:

$('#tbl tr:not(:first)').remove();

【讨论】:

【参考方案8】:

要删除除第一行以外的所有行(标题除外),请使用以下代码:

$("#dataTable tr:gt(1)").remove();

【讨论】:

【参考方案9】:

最简单的方法:

$("#mytable").find($("tr")).slice(1).remove()

-首先引用表格 -获取元素列表并对其进行切片并删除列表中的选定元素

【讨论】:

【参考方案10】:

-抱歉,回复太晚了。

我发现删除任何行(以及通过迭代的所有其他行)的最简单方法是这样

$('#rowid','#tableid').remove();

剩下的很简单。

【讨论】:

【参考方案11】: $("#p-items").find('tr.row-items').remove();

【讨论】:

【参考方案12】:

封装在一个函数中:

function remove_rows(tablename)  
    $(tablename).find("tr:gt(0)").remove();        

然后调用它:

remove_rows('#table1');
remove_rows('#table2');

【讨论】:

【参考方案13】:

这很好用

$("#myTable tbody").children( 'tr:not(:first)' ).html("");

【讨论】:

是的,之前已经发布过多次了。有什么新鲜事吗?【参考方案14】:

这在我的情况下以下列方式工作并且工作正常

$("#compositeTable").find("tr:gt(1)").remove();

【讨论】:

以上是关于jQuery删除除第一行之外的所有表行的主要内容,如果未能解决你的问题,请参考以下文章

Jquery 删除一个下拉菜单中除第一个option之外的所有option

如何删除除第一个之外的所有 URL 哈希?

删除 VIM 中除第一列之外的所有内容

如何从表中删除除前两个和最后一个之外的所有行?

使用 Oracle REGEXP_REPLACE 从字符串中删除除第一个之外的所有点

jQuery选择器删除满足两个条件的表行