我有一张桌子,我想删除除第一张桌子以外的所有<tr>
桌子。我怎么能这样做??
答案 0 :(得分:6)
第一行有特殊含义吗?我要走出去,说第一行可能是包含列标题的行。
如果是这样,一个简单的选择是将第一行放在<thead>
中,将所有正文行放在<tbody>
中。然后你可以简单地做:
$('#myTable tbody tr').remove();
这也为您的HTML提供了更多的语义含义。
答案 1 :(得分:5)
这里有几种方法,最简洁的就是使用:gt()
选择器,如下所示:
$('#tableID tr:gt(0)').remove();
答案 2 :(得分:3)
$('#theTable tr').slice(1).remove();
这使用一个完全有效的CSS选择器来获取所有表行,然后从索引1
(第二行)开始获取集合的a .slice()
,最后删除calls .remove()
行。
有效的CSS选择器很重要,因为它允许jQuery / Sizzle成功使用原生querySelectorAll
方法,这将提供极快的选择。
querySelectorAll
,包括IE8
。
修改强>
虽然您要求使用jQuery解决方案,但我认为我会使用本机DOM API解决方案,因为它的执行速度比其他任何方式都快,而且非常简单。
var rows = document.getElementById('theTable').rows;
while( rows[1] )
rows[1].parentNode.removeChild( rows[1] );
答案 3 :(得分:3)
我想我会加入这个潮流并提供一些解决方案:
如果您在第一行使用thead
,只需将tr
放入tbody
:
$('#myTable tbody tr').remove();
如果您没有使用thead
,则可以通过多种方式获取后续行。我强烈建议您浏览jQuery api
以下是一些如何删除行的示例:
$('#myTable tr + tr').remove();
$('#myTable tr:gt(0)').remove();
$('#myTable tr:not(:first-child)').remove();
$('#myTable').find('tr').not(':first-child').remove();
$('#myTable tr:first-child').siblings().remove();
实际上,这取决于您希望在选择器中的创意,以及您的意图。我没有提供过滤器示例,但使用filter
将允许您调用end
并继续从父元素链接。
你必须做一些单元测试才能看出哪些方法最快,或者如果它不重要则不要。
答案 4 :(得分:1)
答案 5 :(得分:0)
$('table:first-child~tr')。remove();
实施例: http://jsfiddle.net/TwqN3/2/ (感谢Stefan Kendall!我不知道jsfiddle。)