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


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)

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

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

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


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.


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!


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

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

5

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

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

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

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


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

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.


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.


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

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


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.


0

Effacez simplement le corps de la table.

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

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.