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


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)

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(); 

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 = "";

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!


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.


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!


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);
}

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);
}

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()})

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();

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.


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);
}

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.


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.


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);
}

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


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.


0

Räumen Sie einfach den Tischkörper ab.

$("#tblbody").html("");

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.