Löschen Sie alle Zeilen in einer HTML-Tabelle

99

Wie kann ich alle Zeilen einer HTML-Tabelle mit Ausnahme der Zeilen <th>mit Javascript löschen , ohne alle Zeilen in der Tabelle zu durchlaufen? Ich habe eine sehr große Tabelle und möchte die Benutzeroberfläche nicht einfrieren, während ich die Zeilen durchlaufe, um sie zu löschen

K ''
quelle
2
Es muss eine Schleife geben, es gibt keinen Befehl "Mehrere Elemente löschen", die Methode removeChildakzeptiert nur ein einziges DOM-Element.
Šime Vidas
@SLaks unter der Annahme, er meinte die Zeile mit den Kopfzeilen
Eonasdan

Antworten:

92

Behalten Sie die <th>Reihe in a <thead>und die anderen Reihen in a bei <tbody>und ersetzen Sie die <tbody>durch eine neue, leere.

dh

var new_tbody = document.createElement('tbody');
populate_with_new_rows(new_tbody);
old_tbody.parentNode.replaceChild(new_tbody, old_tbody)
QUentin
quelle
Einfach die effizienteste Lösung, vorausgesetzt natürlich, der JavaScript-Entwickler darf den HTML-Code ändern.
Blazemonger
1
Achtung, wenn Sie den tbody mithilfe der innerHTML-Eigenschaft ersetzen möchten, funktioniert dies im IE nicht. Es gibt jedoch eine Problemumgehung.
Aziz Punjani
2
@Eonasdan - Das ist etwas subjektiv. Es gibt viele Bibliotheken da draußen (meine persönliche Präferenz wäre heutzutage die Verwendung von YUI 3), falls jemand mit diesem Problem dieses Problem mit einer von ihnen lösen möchte. Die Prinzipien werden die gleichen sein, egal welchen großen Teil des Codes von Drittanbietern Sie einschließen möchten.
Quentin
3
Necromancing this ... was ist los mit: document.getElementById('tbody').innerHTML = '';
Trees4theForest
2
@ Trees4theForest Das funktioniert gut für mich. Wahrscheinlich war es zum Zeitpunkt der OP nicht möglich.
Mabu
94

Dadurch werden alle Zeilen entfernt:

$("#table_of_items tr").remove(); 
Apparao
quelle
40
Wenn Sie den Header nicht löschen möchten: $ ("# table_of_items tbody tr"). Remove ();
TTT
1
Sehr gute einfache Antwort. Ich habe in meinem CoffeeScript - Ich mag einzeilige Lösungen$("tbody#id tr").remove()
n2o
Ich denke, dies ist eine bessere Antwort als die akzeptierte, obwohl es davon abhängt, ob Sie JQuery verwenden möchten oder nicht. Aber irgendwie funktionierte .remove unter Chrome nicht.
Milind Thakkar
TTT, verwenden Sie <thead> <th> </ th> </ thead> -Tags, um Kopf für Tabelle zu erstellen. Dann $ ("# table_of_items tr"). Remove (); funktioniert gut für Sie, da nur <tr> -Tags entfernt werden.
Kate
TTT, bitte fügen Sie der Antwort Ihren Kommentar hinzu. Ihre Antwort ist perfekt!
Khorshid
57

Sehr grob, aber das funktioniert auch:

var Table = document.getElementById("mytable");
Table.innerHTML = "";
Marcel
quelle
9
Leider bleiben die Header <th> dadurch nicht erhalten, wie es das OP verlangt.
JoSeTe4ever
1
Dies ist der Fall, wenn ihre Header <th> in a verschachtelt sind <thead>. Dies ist wahrscheinlich die syntaktisch korrekteste Methode, um die Tabelle zu erstellen.
Jon Black
Funktioniert super. Ich denke, dies ist nur für Leute wie mich geeignet, die Tabellenüberschriften, Zeilen, Zellen und alles in JQuery erstellt haben.
Shamsul Arefin Sajib
Dies funktionierte gut, um nur das HTML in einem Körper zu löschen :)
RudyOnRails
Ich habe nur den Körper mit einer geringfügigen Änderung var bodyRef = document.getElementById('myTable').getElementsByTagName('tbody')[0]; bodyRef.innerHTML = '';
gelöscht
17

Dies ist eine alte Frage, aber ich hatte kürzlich ein ähnliches Problem.
Ich habe diesen Code geschrieben, um ihn zu lösen:

var elmtTable = document.getElementById('TABLE_ID_HERE');
var tableRows = elmtTable.getElementsByTagName('tr');
var rowCount = tableRows.length;

for (var x=rowCount-1; x>0; x--) {
   elmtTable.removeChild(tableRows[x]);
}

Dadurch werden alle Zeilen außer der ersten entfernt.

Prost!

cstrat
quelle
9
kürzer (und schneller): var rowCount = myTable.rows.length; while (- rowCount) myTable.deleteRow (rowCount);
Petar
Der Code im Kommentar oben entfernt nicht die erste Zeile
PrfctByDsgn
16

Zu beachtende Punkte : Achten Sie auf häufige Fehler :

Wenn Ihr Startindex 0 ist (oder ein Index von Anfang an), lautet der richtige Code:

var tableHeaderRowCount = 1;
var table = document.getElementById('WRITE_YOUR_HTML_TABLE_NAME_HERE');
var rowCount = table.rows.length;
for (var i = tableHeaderRowCount; i < rowCount; i++) {
    table.deleteRow(tableHeaderRowCount);
}

ANMERKUNGEN

1. Das Argument für deleteRow ist festgelegt.
Dies ist erforderlich, da beim Löschen einer Zeile die Anzahl der Zeilen abnimmt.
dh; Wenn ich (rows.length - 1) erreiche oder sogar bevor diese Zeile bereits gelöscht ist, haben Sie einen Fehler / eine Ausnahme (oder eine stille).

2. Der rowCount wird vor dem Start der for-Schleife genommen, da sich beim Löschen die "table.rows.length" ständig ändert. Sie haben also wieder das Problem, dass nur ungerade oder gerade Zeilen gelöscht werden.

Hoffentlich hilft das.

Manohar Reddy Poreddy
quelle
10

Angenommen, Sie haben nur eine Tabelle, sodass Sie sie nur mit dem Typ referenzieren können. Wenn Sie die Header nicht löschen möchten:

$("tbody").children().remove()

Andernfalls:

$("table").children().remove()

ich hoffe es hilft!

Francisco López-Sancho
quelle
7

Ich musste alle Zeilen außer der ersten und der von @strat veröffentlichten Lösung löschen, aber das führte zu einer nicht erfassten Ausnahme (Verweis auf Node in einem Kontext, in dem er nicht vorhanden ist). Folgendes hat bei mir funktioniert.

var myTable = document.getElementById("myTable");
var rowCount = myTable.rows.length;
for (var x=rowCount-1; x>0; x--) {
   myTable.deleteRow(x);
}
lkan
quelle
7

Wenn Sie ein IDfür deklarieren können, können tbodySie einfach diese Funktion ausführen:

var node = document.getElementById("tablebody");
while (node.hasChildNodes()) {
  node.removeChild(node.lastChild);
}
OSB
quelle
5

Dies würde das Löschen der Iteration in einer nativen HTML-Tabelle bewirken

document.querySelectorAll("table tbody tr").forEach(function(e){e.remove()})
Jäger
quelle
5

Der unten stehende Code funktioniert hervorragend. Es werden alle Zeilen außer der Kopfzeile entfernt. Also dieser Code wirklich t

$("#Your_Table tr>td").remove();
sid
quelle
3
Warten Sie, dies ist die Antwort von jQuery. Die ursprüngliche Frage wurde nicht speziell für die jQuery-Lösung gestellt.
revelt
4

Zuweisen einer ID zum tbody-Tag. dh. Danach sollte die folgende Zeile die Kopf- / Fußzeile der Tabelle beibehalten und alle Zeilen entfernen.

document.getElementById("yourID").innerHTML="";

Wenn Sie möchten, dass die gesamte Tabelle (Kopf- / Zeilen- / Fußzeile) gelöscht wird, legen Sie die ID auf Tabellenebene fest, d. H.

Vinaykumar Patel
quelle
3

Wenn Sie nicht entfernen möchten thund nur die darin enthaltenen Zeilen entfernen möchten, funktioniert dies einwandfrei.

var tb = document.getElementById('tableId');
  while(tb.rows.length > 1) {
  tb.deleteRow(1);
}
Suresh Atta
quelle
3

Wie wäre es damit:

Gehen Sie beim ersten Laden der Seite folgendermaßen vor:

var myTable = document.getElementById("myTable");
myTable.oldHTML=myTable.innerHTML;

Wenn Sie dann die Tabelle löschen möchten:

myTable.innerHTML=myTable.oldHTML;

Das Ergebnis sind Ihre Kopfzeilen, wenn das alles ist, mit dem Sie begonnen haben. Die Leistung ist dramatisch schneller als bei Schleifen.

Len White
quelle
sehr elegante Lösung
revelt
2

Wenn Sie weit weniger <th>Zeilen als Nichtzeilen haben <th>, können Sie alle <th>Zeilen in einer Zeichenfolge zusammenfassen, die gesamte Tabelle entfernen und dann schreiben<table>thstring</table> wo sich die Tabelle befand.

EDIT: Wobei "thstring" offensichtlich das HTML für alle Zeilen von <th>s ist.

yoozer8
quelle
1
Sammeln Sie <th>stattdessen das s als DOM-Elemente, löschen Sie das innerHTML der Tabelle und hängen Sie das <th>s erneut an.
Entonio
Achtung, wenn Sie clear tbody mithilfe der innerHTML-Eigenschaft ersetzen möchten, funktioniert dies im IE nicht. Es gibt jedoch eine Problemumgehung.
Aziz Punjani
2

Dies funktioniert im IE, ohne dass eine Variable für die Tabelle deklariert werden muss, und löscht alle Zeilen:

for(var i = 0; i < resultsTable.rows.length;)
{   
   resultsTable.deleteRow(i);
}
Lester Northe
quelle
1

Dies ist ein einfacher Code, den ich gerade geschrieben habe, um dies zu lösen, ohne die Kopfzeile (erste) zu entfernen.

var Tbl = document.getElementById('tblId');
while(Tbl.childNodes.length>2){Tbl.removeChild(Tbl.lastChild);}

Hoffe es funktioniert bei dir !!.

user3423649
quelle
1

Weisen Sie Ihrem Körper eine ID oder eine Klasse zu.

document.querySelector("#tbodyId").remove();
document.querySelectorAll(".tbodyClass").remove();

Sie können Ihre ID oder Klasse so benennen, wie Sie möchten, nicht unbedingt #tbodyIdoder .tbodyClass.

Andreea
quelle
0

Räumen Sie einfach den Tischkörper ab.

$("#tblbody").html("");
Siva
quelle
2
html () ist eigentlich eine jQuery-Methode.
Carlodurso
-1

const table = document.querySelector ('table'); table.innerHTML === ''? null: table.innerHTML = ''; Das obige Javascript hat bei mir gut funktioniert. Es prüft, ob die Tabelle Daten enthält, und löscht dann alles einschließlich des Headers.

Papst Franziskus
quelle