如何使用jquery从表中删除除第一个之外的所有

我有一个表,我想删除除第一个表之外的所有表的

。 我怎样才能做到这一点。?

这里有几种方法,最简洁的是使用:gt()选择器,如下所示:

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

第一排有特殊意义吗? 我要走出去,说第一排可能是包含列标题的行。

如果是这样,一个简单的选择是将第一行放在

,将所有主体行放在

。 然后你可以简单地做:

 $('#myTable tbody tr').remove(); 

这也为您的HTML提供了更多的语义含义。

我想我会加入这个潮流并提供一些解决方案:

如果你在第一行使用thead ,只需将tr放在tbody

 $('#myTable tbody tr').remove(); 

如果您不使用thead ,则可以通过多种方式获取后续行。 我强烈建议查看jQuery api

以下是一些如何删除行的示例:

  1. $('#myTable tr + tr').remove();
  2. $('#myTable tr:gt(0)').remove();
  3. $('#myTable tr:not(:first-child)').remove();
  4. $('#myTable').find('tr').not(':first-child').remove();
  5. $('#myTable tr:first-child').siblings().remove();

真的,它取决于你想要在你的选择器中的创意,以及你的意图。 我没有提供filter示例,但使用filter将允许您调用end并继续从父元素链接。

您将不得不进行一些unit testing,以查看哪些方法最快,或者如果不重要则不要。

 $('#theTable tr').slice(1).remove(); 

这使用一个完全有效的CSS选择器来获取所有表行,然后从索引1 (第二行)开始获取集合的.slice() ),最后调用.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] ); 
 $('#myTable').find('tr').not(":first").remove(); 

例:

http://jsfiddle.net/TwqN3/

使用下一个兄弟选择器 :

$(’table:first-child~tr’)。remove();

示例: http : //jsfiddle.net/TwqN3/2/ (感谢Stefan Kendall!我不知道jsfiddle。)