Elimina tutte le righe in una tabella HTML


99

Come posso eliminare tutte le righe di una tabella HTML eccetto quelle <th>utilizzando Javascript e senza scorrere tutte le righe nella tabella? Ho una tabella molto grande e non voglio bloccare l'interfaccia utente mentre sto scorrendo le righe per eliminarle


2
Deve esserci un ciclo, non esiste un comando "cancella elementi multipli", il metodo removeChildaccetta solo un singolo elemento DOM.
Šime Vidas

@SLaks assumendo che si riferisse alla riga contenente le righe di intestazione
Eonasdan

Risposte:


92

Mantieni la <th>riga in a <thead>e le altre righe in a, <tbody>quindi sostituisci <tbody>con una nuova e vuota.

cioè

var new_tbody = document.createElement('tbody');
populate_with_new_rows(new_tbody);
old_tbody.parentNode.replaceChild(new_tbody, old_tbody)

Facilmente la soluzione più efficiente, a condizione ovviamente che lo sviluppatore JavaScript sia autorizzato a modificare l'HTML.
Blazemonger

1
Attenzione, se sostituisci il tbody usando la proprietà innerHTML, non funzionerà in IE, c'è una soluzione alternativa.
aziz punjani

2
@Eonasdan - È in qualche modo soggettivo. Ci sono molte librerie là fuori (la mia preferenza personale sarebbe quella di usare YUI 3 in questi giorni) se qualcuno con questo problema volesse risolvere questo problema con uno di loro. I principi saranno gli stessi, indipendentemente dall'enorme porzione di codice di terze parti che desideri includere.
Quentin

3
Negromando questo ... cosa c'è di sbagliato in: document.getElementById('tbody').innerHTML = '';
Trees4theForest

2
@ Trees4theForest Questo funziona bene per me. Probabilmente non era possibile al momento dell'OP.
Mabu

94

questo rimuoverà tutte le righe:

$("#table_of_items tr").remove(); 

40
Se non vuoi eliminare l'intestazione: $ ("# table_of_items tbody tr"). Remove ();
TTT

1
Risposta semplice molto buona. Ho usato nel mio CoffeeScript - mi piacciono le soluzioni di una riga$("tbody#id tr").remove()
n2o

Penso che questa sia una risposta migliore di quella accettata, anche se dipende dal fatto che tu voglia utilizzare JQuery o meno. Ma in qualche modo .remove non ha funzionato su Chrome.
Milind Thakkar

TTT, utilizza i tag <thead><th></th> </thead> per creare head for table. Quindi $ ("# table_of_items tr"). Remove (); funziona bene per te, perché rimuove solo i tag <tr>.
Kate

TTT, aggiungi il tuo commento alla risposta. La tua risposta è perfetta!
Khorshid,

57

Molto rozzo, ma funziona anche:

var Table = document.getElementById("mytable");
Table.innerHTML = "";

9
Sfortunatamente questo non mantiene le intestazioni <th> come richiesto dall'OP.
JoSeTe4ever

1
Lo fa se inseriscono le loro intestazioni <th> nidificate in un file <thead>. Questo è probabilmente il modo più sintatticamente corretto per costruire comunque la tabella.
Jon Black

Funziona alla grande. Penso che questo sia adatto solo a persone come me, che hanno creato intestazioni di tabella, righe, celle, tutto in JQuery.
Shamsul Arefin Sajib

Ha funzionato bene per cancellare l'html all'interno di un tbody :)
RudyOnRails

Ho cancellato solo il corpo con una leggera modifica a questo var bodyRef = document.getElementById('myTable').getElementsByTagName('tbody')[0]; bodyRef.innerHTML = '';
azyth

17

Questa è una vecchia domanda, tuttavia recentemente ho avuto un problema simile.
Ho scritto questo codice per risolverlo:

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

Ciò rimuoverà tutte le righe, tranne la prima.

Saluti!


9
più breve (e più veloce): var rowCount = myTable.rows.length; while (- rowCount) myTable.deleteRow (rowCount);
Petar

Il codice nel commento sopra non rimuove la prima riga
PrfctByDsgn

16

Punti da notare, sull'attenzione agli errori comuni :

Se il tuo indice iniziale è 0 (o un indice dall'inizio), il codice corretto è:

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

APPUNTI

1. l'argomento per deleteRow è fisso,
questo è richiesto poiché cancellando una riga, il numero di righe diminuisce.
ie; nel momento in cui raggiungo (rows.length - 1), o anche prima che quella riga sia già cancellata, quindi avrai qualche errore / eccezione (o uno silenzioso).

2. il rowCount viene preso prima che inizi il ciclo for poiché cancellando "table.rows.length" continuerà a cambiare, quindi di nuovo hai qualche problema, che solo le righe dispari o pari vengono eliminate solo.

Spero che aiuti.


10

Supponendo che tu abbia solo una tabella in modo da poterla fare riferimento solo con il tipo. Se non desideri eliminare le intestazioni:

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

altrimenti:

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

spero che sia d'aiuto!


7

Avevo bisogno di eliminare tutte le righe tranne la prima e la soluzione pubblicata da @strat, ma ciò ha comportato un'eccezione non rilevata (facendo riferimento a Node nel contesto in cui non esiste). Quanto segue ha funzionato per me.

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

7

Se puoi dichiarare un IDper tbodypuoi semplicemente eseguire questa funzione:

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

5

questo funzionerebbe l'eliminazione dell'iterazione nella tabella HTML in nativo

document.querySelectorAll("table tbody tr").forEach(function(e){e.remove()})

5

il codice riportato di seguito funziona alla grande. Rimuove tutte le righe tranne la riga di intestazione. Quindi questo codice davvero t

$("#Your_Table tr>td").remove();

3
aspetta, questa è la risposta jQuery, la domanda originale non chiedeva specificamente la soluzione jQuery!
festeggia il

4

Assegnare un ID al tag tbody. cioè. Successivamente, la riga seguente dovrebbe mantenere l'intestazione / piè di pagina della tabella e rimuovere tutte le righe.

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

E, se desideri che l'intera tabella (intestazione / righe / piè di pagina) venga cancellata, imposta l'id a livello di tabella, ad es.


3

Se non vuoi rimuovere the vuoi solo rimuovere le righe all'interno, questo funziona perfettamente.

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

3

Cosa ne pensi di questo:

Quando la pagina viene caricata per la prima volta, eseguire questa operazione:

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

Quindi, quando vuoi cancellare la tabella:

myTable.innerHTML=myTable.oldHTML;

Il risultato saranno le tue righe di intestazione se questo è tutto ciò con cui hai iniziato, le prestazioni sono notevolmente più veloci del loop.


soluzione molto elegante
festa

2

Se hai molte meno <th>righe rispetto alle non <th>righe, potresti raccogliere tutte le <th>righe in una stringa, rimuovere l'intera tabella e quindi scrivere <table>thstring</table>dove si trovava la tabella.

EDIT: dove, ovviamente, "thstring" è l'html per tutte le righe di <th>s.


1
Piuttosto, raccogli <th>i messaggi di posta elettronica come elementi DOM, cancella l'HTML interno della tabella, quindi aggiungi <th>di nuovo i messaggi di posta elettronica.
entonio

Attenzione, se sostituisci clear tbody usando la proprietà innerHTML, non funzionerà in IE, c'è comunque una soluzione alternativa.
aziz punjani

2

Funziona in IE senza nemmeno dover dichiarare una var per la tabella e cancellerà tutte le righe:

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

1

questo è un semplice codice che ho appena scritto per risolvere questo problema, senza rimuovere la riga di intestazione (la prima).

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

Spero che funzioni per te !!.


1

Assegna un ID o una classe per il tuo corpo.

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

Puoi nominare l'ID o la classe come preferisci, non necessariamente #tbodyIdo .tbodyClass.


0

Basta pulire il corpo del tavolo.

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

2
html () è in realtà un metodo jQuery.
carlodurso

-1

const table = document.querySelector ('table'); table.innerHTML === ''? null: table.innerHTML = ''; il javascript sopra ha funzionato bene per me. Verifica se la tabella contiene dati e quindi cancella tutto, inclusa l'intestazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.