Supprimer toutes les lignes d'un tableau HTML

99

Comment puis-je supprimer toutes les lignes d'un tableau HTML à l'exception <th>de celles qui utilisent Javascript, et sans parcourir toutes les lignes du tableau? J'ai une très grande table et je ne veux pas geler l'interface utilisateur pendant que je parcourt les lignes pour les supprimer

K ''
la source
2
Il doit y avoir une boucle, il n'y a pas de commande "delete-multiple-elements", la méthode removeChildne prend qu'un seul élément DOM.
Šime Vidas
@SLaks en supposant qu'il voulait dire la ligne contenant les lignes d'en-tête
Eonasdan

Réponses:

92

Gardez la <th>ligne dans a <thead>et les autres lignes dans a, <tbody>puis remplacez le <tbody>par un nouveau, vide.

c'est à dire

var new_tbody = document.createElement('tbody');
populate_with_new_rows(new_tbody);
old_tbody.parentNode.replaceChild(new_tbody, old_tbody)
Quentin
la source
Facilement la solution la plus efficace, à condition bien sûr que le développeur JavaScript soit autorisé à modifier le HTML.
Blazemonger le
1
Attention, si vous allez remplacer le tbody en utilisant la propriété innerHTML, cela ne fonctionnera pas dans IE, il existe cependant une solution de contournement.
aziz punjani le
2
@Eonasdan - C'est un peu subjectif. Il existe de nombreuses bibliothèques (ma préférence personnelle serait d'utiliser YUI 3 ces jours-ci) si quelqu'un avec ce problème veut résoudre ce problème avec l'une d'entre elles. Les principes seront les mêmes, quel que soit l'énorme morceau de code tiers que vous souhaitez inclure.
Quentin
3
Necromancing this ... quel est le problème avec: document.getElementById('tbody').innerHTML = '';
Trees4theForest
2
@ Trees4theForest Cela fonctionne très bien pour moi. Ce n'était probablement pas possible au moment de l'OP.
Mabu
94

cela supprimera toutes les lignes:

$("#table_of_items tr").remove(); 
Apparao
la source
40
Si vous ne voulez pas supprimer l'en-tête: $ ("# table_of_items tbody tr"). Remove ();
TTT
1
Très bonne réponse simple. J'ai utilisé dans mon CoffeeScript - j'aime les solutions en une ligne$("tbody#id tr").remove()
n2o
Je pense que c'est une meilleure réponse que celle acceptée, même si cela dépend de si vous voulez utiliser JQuery ou non. Mais d'une manière ou d'une autre .remove ne fonctionnait pas sur Chrome.
Milind Thakkar
TTT, utilisez les balises <thead><th></th> </thead> pour créer une tête de tableau. Alors $ ("# table_of_items tr"). Remove (); fonctionne bien pour vous, car il supprime uniquement les balises <tr>.
Kate
TTT, veuillez ajouter votre commentaire à la réponse. Votre réponse est parfaite!
Khorshid
57

Très brut, mais cela fonctionne aussi:

var Table = document.getElementById("mytable");
Table.innerHTML = "";
Marcel
la source
9
Malheureusement, cela ne conserve pas les en-têtes <th> comme le demande l'OP.
JoSeTe4ever
1
C'est le cas s'ils mettent leurs en-têtes <th> imbriqués dans un fichier <thead>. C'est probablement la manière la plus syntaxiquement correcte de créer la table de toute façon.
Jon Black
Fonctionne très bien. Je pense que cela ne convient qu'aux personnes comme moi, qui ont créé un en-tête de tableau, une ligne, une cellule, tout dans JQuery.
Shamsul Arefin Sajib
Cela a bien fonctionné pour simplement effacer le code HTML à l'intérieur d'un tbody :)
RudyOnRails
J'ai effacé juste le corps avec une légère modification à ceci var bodyRef = document.getElementById('myTable').getElementsByTagName('tbody')[0]; bodyRef.innerHTML = '';
azyth
17

C'est une vieille question, mais j'ai récemment eu un problème similaire.
J'ai écrit ce code pour le résoudre:

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

Cela supprimera toutes les lignes, sauf la première.

À votre santé!

cstrat
la source
9
plus court (et plus rapide): var rowCount = myTable.rows.length; while (- rowCount) myTable.deleteRow (rowCount);
Petar
Le code dans le commentaire ci-dessus ne supprime pas la première ligne
PrfctByDsgn
16

Points à noter, à l' affût des erreurs courantes :

Si votre index de départ est 0 (ou un index du début), le code correct est:

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

REMARQUES

1. l'argument de deleteRow est fixe,
ceci est nécessaire car lorsque nous supprimons une ligne, le nombre de lignes diminue.
c'est à dire; au moment où j'atteins (rows.length - 1), ou même avant que cette ligne ne soit déjà supprimée, vous aurez donc une erreur / exception (ou une erreur silencieuse).

2. le rowCount est pris avant le début de la boucle for car à mesure que nous supprimons le "table.rows.length" continuera à changer, donc encore une fois vous avez un problème, que seules les lignes impaires ou paires sont supprimées.

J'espère que cela pourra aider.

Manohar Reddy Poreddy
la source
10

En supposant que vous n'ayez qu'une seule table afin de pouvoir la référencer avec uniquement le type. Si vous ne souhaitez pas supprimer les en-têtes:

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

autrement:

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

J'espère que ça aide!

Francisco López-Sancho
la source
7

J'avais besoin de supprimer toutes les lignes à l'exception de la première et de la solution publiée par @strat mais cela a abouti à une exception non interceptée (référençant Node dans un contexte où il n'existe pas). Ce qui suit a fonctionné pour moi.

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

Si vous pouvez déclarer un IDfor, tbodyvous pouvez simplement exécuter cette fonction:

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

cela fonctionnerait la suppression d'itération dans le tableau HTML en natif

document.querySelectorAll("table tbody tr").forEach(function(e){e.remove()})
Chasseur
la source
5

le code ci-dessous fonctionne très bien. Il supprime toutes les lignes sauf la ligne d'en-tête. Donc ce code vraiment t

$("#Your_Table tr>td").remove();
sid
la source
3
attendez, c'est la réponse jQuery, la question d'origine ne demandait pas spécifiquement la solution jQuery!
revelt le
4

Assing some id to tbody tag. c'est à dire . Après cela, la ligne suivante doit conserver l'en-tête / pied de page du tableau et supprimer toutes les lignes.

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

Et, si vous voulez que la table entière (en-tête / lignes / pied de page) soit effacée, définissez l'ID au niveau de la table, c'est-à-dire

Vinaykumar Patel
la source
3

Si vous ne souhaitez pas supprimer thet que vous souhaitez simplement supprimer les lignes à l'intérieur, cela fonctionne parfaitement.

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

Que dis-tu de ça:

Lorsque la page se charge pour la première fois, procédez comme suit:

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

Ensuite, lorsque vous souhaitez vider le tableau:

myTable.innerHTML=myTable.oldHTML;

Le résultat sera votre (vos) ligne (s) d'en-tête si c'est tout ce que vous avez commencé, les performances sont considérablement plus rapides que la boucle.

Len Blanc
la source
solution très élégante
revelt
2

Si vous avez beaucoup moins de <th>lignes que de non- <th>lignes, vous pouvez rassembler toutes les <th>lignes dans une chaîne, supprimer la table entière, puis écrire <table>thstring</table>où la table se trouvait auparavant.

EDIT: Où, évidemment, "thstring" est le code HTML pour toutes les lignes de <th>s.

yoozer8
la source
1
Au lieu de cela, collectez les <th>s en tant qu'éléments DOM, effacez le fichier innerHTML de la table, puis ajoutez-y <th>à nouveau les s.
entonio
Attention, si vous allez remplacer clear tbody en utilisant la propriété innerHTML, cela ne fonctionnera pas dans IE, il existe cependant une solution de contournement.
aziz punjani
2

Cela fonctionne dans IE sans même avoir à déclarer une var pour la table et supprimera toutes les lignes:

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

c'est un code simple que je viens d'écrire pour résoudre ce problème, sans supprimer la ligne d'en-tête (la première).

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

J'espère que ça marche pour toi!!.

utilisateur3423649
la source
1

Attribuez un identifiant ou une classe à votre corps.

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

Vous pouvez nommer votre identifiant ou votre classe comme vous le souhaitez, pas nécessairement #tbodyIdou .tbodyClass.

Andreea
la source
0

Effacez simplement le corps de la table.

$("#tblbody").html("");
siva
la source
2
html () est en fait une méthode jQuery.
carlodurso
-1

table const = document.querySelector ('table'); table.innerHTML === ''? null: table.innerHTML = ''; le javascript ci-dessus a bien fonctionné pour moi. Il vérifie si le tableau contient des données, puis efface tout, y compris l'en-tête.

Pape François
la source