2008-12-15 11 views
253

Mit jQuery, wie lösche ich alle Zeilen in einer Tabelle mit Ausnahme der ersten? Dies ist mein erster Versuch, Indexselektoren zu verwenden. Wenn ich die Beispiele richtig zu verstehen, sollte die folgende Arbeiten:jQuery löschen Sie alle Tabellenzeilen mit Ausnahme der ersten

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

, die ich als „Wrap eine Tabelle in einem jQuery-Objekt lesen würde, dann entfernen Sie alle‚tr‘Elemente (Zeilen), wo der Elementindex solcher Reihen ist größer als Null ". In Wirklichkeit wird es ausgeführt, ohne einen Fehler zu erzeugen, aber entfernt keine Zeilen aus der Tabelle.

Was fehlt mir und wie behebe ich das? Natürlich könnte ich gerade Javascript verwenden, aber ich habe so viel Spaß mit jQuery, dass ich das gerne mit jQuery lösen würde.

+0

Weiß jemand, warum der angegebene Code nicht funktioniert? Ich habe auch Problem, wenn Filter-Selektor in remove-Funktion setzen – Leto

+1

Nun, da ich das besser verstehe, funktioniert der obige Code nicht, weil $ (einige Tabelle Selektor) nur das Tabellenelement auswählt, nicht irgendwelche seiner Kinder, so gibt es keine tr 'Elemente für die Remove-Funktion zu finden. Mit der Suchfunktion wird nach Übereinstimmungen zwischen den untergeordneten Elementen des Tabellenelements gesucht. –

+0

Sieh dir diese Antwort an http://stackoverflow.com/questions/4831334/jquery-selector-all-but-the-first/18322370#18322370 – AuthorProxy

Antwort

461

sollte diese Arbeit:

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

Vielen Dank - das hat perfekt funktioniert. –

+2

Was ist, wenn ich Tabellenzeilen außer dem ersten und zweiten entfernen möchte? –

+14

@ user594166 Verwenden Sie GT (1) anstelle von GT (0). – christianvuerings

28

Ihre Wähler in Ihrem entfernen sein nicht braucht.

Es sollte etwas wie folgt aussehen:

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

Das bedeutet, jede Zeile mit Ausnahme der ersten in der Tabelle mit der ID von tableID auswählen und sie aus dem DOM entfernen.

+0

Ich stimme zu. In meinem Fall wurde das Tabellenobjekt zuvor ausgewählt. –

+1

irgendwie ist dies die einzige, die für mich funktioniert – Shekhar

+0

Um alle Zeilen außer der ersten zu entfernen: - $ ("# tableID tr: gt (1)"). Remove(); – Biki

100

Ich denke, dies in der Absicht gegeben ist besser lesbar:

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

Mit Kindern kümmert sich auch um den Fall, dass die erste Zeile eine Tabelle enthält, die durch die Tiefe der Suche zu begrenzen.

Falls Sie ein TBODY Element hatten, können Sie dies tun:

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

Wenn Sie THEAD oder TFOOT Elemente müssen Sie etwas anderes tun.

+3

Ich stimme zu - danke. Ich wünschte, ich könnte mehrere Antworten geben. –

+2

re: etwas anderes tun .... das funktioniert: '$ ('someTableSelector> tbody: last> tr: nicht (: first)'). Remove();' – Cheeso

+0

um alle untergeordneten Elemente zu entfernen, die doppelte Anführungszeichen verwenden. Erkennte es nicht anders. '$ (" # tasks "). children(). remove();' – Doomsknight

35

Wenn es nach mir ginge, würde ich wahrscheinlich kocht sich auf einen einzigen Auswahltaste nach unten:

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

Stimmen Sie zu, aber genauer gesagt: $ ('someTableSelector tbody tr: not (: first)'). remove(); –

33

Einem anderen Weg, dies zu erreichen, ist die leere() Funktion von jQuery mit dem thead und tbody Elementen in Ihrem Tabelle.

Beispiel für eine Tabelle:

<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> 

Und die jQuery-Befehl:

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

Dies wird alle Zeilen, die in dem tbody Element Ihrer Tabelle entfernen und das thead Element halten, wo Ihre Header sollte Sein. Dies kann nützlich sein, wenn Sie nur den Inhalt einer Tabelle aktualisieren möchten.

+2

Dies wird wahrscheinlich die beste Leistung aller angebotenen Lösungen haben und ist sehr elegant. –

6

Betrachten Sie eine Tabelle mit der ID tbl:

über diesen ‚Scheibe‘ ist schneller als alle anderen Ansätze
$('#tbl tr:not(:first)').remove(); 
5
$('#table tr').slice(1).remove(); 

Ich erinnere mich kommen, so einfach es hier setzen: der Code jQuery wäre.

+0

Einige funktionierte es nicht für mich. Die akzeptierte Antwort scheint den Trick zu machen. – dotslash

0

-Sorry das ist sehr späte Antwort.

Der einfachste Weg, den ich gefunden habe jede Zeile (und alle anderen Zeilen durch Iteration) löschen ist diese

$ ('# Rowid', '# tableid') entfernen().

Der Rest ist einfach.

0
 

$("#p-items").find('tr.row-items').remove(); 
1

Um alle Zeilen, mit Ausnahme des ersten (außer Header) zu entfernen, verwenden Sie den folgenden Code:

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

0

in einer Funktion eingewickelt:

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

dann nennen :

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

Das funktioniert einwandfrei

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

Ja, das war schon mehrmals gepostet. Etwas Neues? –

Verwandte Themen