web-dev-qa-db-fra.com

Supprimer une ligne d'une table par identifiant

J'ai un petit problème. J'ai des tables créées dynamiquement et chaque ligne a un identifiant. Je veux supprimer la ligne avec l'id "x".

J'ai essayé la méthode habituelle (removeChild) mais cela ne fonctionne apparemment pas pour les tables.

function deleteRow(tableid, rowid)  
{   
      document.getElementById(tableid).removeChild(document.getElementById(rowid));  
}   

L'erreur que je reçois est la suivante: le noeud n'a pas été trouvé "code:" 8

J'ai aussi essayé ceci:

function deleteRow(tbodyid, rowid)   
{  
      document.getElementById(tbodyid).removeChild(document.getElementById(rowid));   
}   

et a la même erreur.

Je ne peux pas utiliser la méthode deleteRow() car il faut l'index de la ligne et je préfère ne pas rechercher l'id, puis le supprimer (même si je ne trouve pas d'autres solutions ...). 

16
zozo

Que diriez-vous:

function deleteRow(rowid)  
{   
    var row = document.getElementById(rowid);
    row.parentNode.removeChild(row);
}

Et, si cela échoue, cela devrait vraiment fonctionner:

function deleteRow(rowid)  
{   
    var row = document.getElementById(rowid);
    var table = row.parentNode;
    while ( table && table.tagName != 'TABLE' )
        table = table.parentNode;
    if ( !table )
        return;
    table.deleteRow(row.rowIndex);
}
61
Vilx-

à Vilx-:

var table = row.parentNode;
while ( table && table.tagName != 'TABLE' )
    table = table.parentNode;

et que se passe-t-il si row.parentNode est TBODY?

Vous devriez le vérifier en premier, et ensuitedo while par .tBodies, probablement

3
Yuri

Depuis ce post , essayez ce javascript:

function removeRow(id) {
  var tr = document.getElementById(id);
  if (tr) {
    if (tr.nodeName == 'TR') {
      var tbl = tr; // Look up the hierarchy for TABLE
      while (tbl != document && tbl.nodeName != 'TABLE') {
        tbl = tbl.parentNode;
      }

      if (tbl && tbl.nodeName == 'TABLE') {
        while (tr.hasChildNodes()) {
          tr.removeChild( tr.lastChild );
        }
      tr.parentNode.removeChild( tr );
      }
    } else {
      alert( 'Specified document element is not a TR. id=' + id );
    }
  } else {
    alert( 'Specified document element is not found. id=' + id );
  }
}

J'ai essayé ce javascript dans une page de test et cela a fonctionné pour moi dans Firefox.

2
rsbarro

Et que diriez-vous d'essayer de ne pas supprimer mais de cacher cette ligne?

1
Napas

Le parent de la ligne n'est pas l'objet que vous pensez, c'est ce que j'ai compris de l'erreur.
Essayez de détecter le parent de la ligne en premier, puis vous saurez quoi écrire dans la partie getElementById du parent.

0
Oralet

Quelque chose de rapide et sale:

<script type='text/javascript'>
function del_tr(remtr)  
{   
    while((remtr.nodeName.toLowerCase())!='tr')
        remtr = remtr.parentNode;

    remtr.parentNode.removeChild(remtr);
}
function del_id(id)  
{   
        del_tr(document.getElementById(id));
}
</script>

si vous placez 

<a href='' onclick='del_tr(this);return false;'>x</a>

n'importe où dans la ligne que vous souhaitez supprimer, que même travailler sans identifiant

0
Oliver Zendel