Löschen Sie eine Zeile aus einer Tabelle nach ID

Lesezeit: 4 Minuten

Benutzer-Avatar
zozo

Ich habe ein kleines Problem. Ich habe einige dynamisch erstellte Tabellen und jede Zeile hat eine ID. Ich möchte die Zeile mit der ID “x” löschen.

Ich habe die übliche Methode (removeChild) ausprobiert, aber es funktioniert anscheinend nicht für Tabellen.

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

Der Fehler, den ich bekomme, ist: Knoten wurde nicht gefunden” Code: “8

Ich habe auch das versucht:

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

und bekam den gleichen Fehler.

Ich kann die nicht verwenden deleteRow() -Methode, da diese den Index der Zeile benötigt und ich lieber nicht nach der ID suche, den Index markiere und dann lösche (auch wenn ich keine anderen Lösungen finde …).

  • Sie könnten den Zeilenindex erhalten durch rowElement.rowIndex

    – Felix Klinge

    11. Februar 2011 um 9:11 Uhr

  • Könnten Sie eine Beispieltabelle zum Testen hinzufügen. Es könnte etwas Seltsames in der Art und Weise sein, wie die Tabelle entworfen ist.

    – David Martensson

    11. Februar 2011 um 9:20 Uhr

  • Für andere Leute, die das gleiche Problem haben: Dies passiert für das erste Code-Snippet, weil das übergeordnete Element ein in einer Tabelle ist stets ein -, – oder -Element. Wenn Sie Ihr in Ihrem HTML nicht in eines davon einschließen, fügt das DOM automatisch ein ein, und dies wird das übergeordnete Element Ihres sein. nicht das

    -Element. So removeChild() Der Aufruf aus dem Tabellenelement schlägt fehl.

    – Tun

    19. Oktober 2019 um 6:12 Uhr


    Wie wäre es mit:

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

    Und wenn das fehlschlägt, sollte das wirklich funktionieren:

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

    • Deine erste Wahl hat bei mir super funktioniert. Ich hatte erfolglos mit rowIndex herumgespielt, aber es ist gut, dieses Beispiel zu sehen.

      – Betty Mock

      15. Dezember 2014 um 21:20 Uhr

    • Hervorragende Arbeit (zweite Methode)

      – dipenparmar12

      17. September 2020 um 6:20 Uhr


    • Im IE7 ist die removeChild(row) Methode hat bei mir besser funktioniert. Die Tabellenspaltenbreiten bleiben dabei flexibel table.deleteRow sie bleiben stecken.

      – Agostino

      11. Juni 2021 um 9:43 Uhr

    • @Agostino – Es ist 2021. Wenn Sie IE7 noch unterstützen müssen, viel Glück für Sie, aber Sie sind auf sich allein gestellt. Diese alten Browser waren seltsam …

      – Vix-

      11. Juni 2021 um 9:52 Uhr

    Und was ist mit dem Versuch, diese Zeile nicht zu löschen, sondern auszublenden?

    • Nun … außer der Tatsache, dass es ungefähr 80000 gibt und es ziemlich schlecht funktionieren würde … Ich überprüfe, ob es existiert, und hole dann Daten daraus, wenn es existiert (ich könnte auch nach display:none suchen, aber ich denke, es ist schneller zu überprüfen nicht definiert).

      – zozo

      11. Februar 2011 um 9:14 Uhr

    Davon Postversuchen Sie dieses 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 );
      }
    }
    

    Ich habe dieses Javascript auf einer Testseite ausprobiert und es hat bei mir in Firefox funktioniert.

    Benutzer-Avatar
    Yuri

    zu Vilx-:

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

    und was wäre wenn row.parentNode ist TBODY?

    Sie sollten es zuerst überprüfen und dann tun while durch .tBodieswahrscheinlich

    Etwas schnell und schmutzig:

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

    wenn du platzierst

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

    irgendwo in der Zeile, die Sie löschen möchten, dann funktioniert es sogar ohne IDs

    Benutzer-Avatar
    Oralet

    Das übergeordnete Element der Zeile ist nicht das Objekt, von dem Sie denken, dass ich es aus dem Fehler verstehe.
    Versuchen Sie zuerst, das übergeordnete Element der Zeile zu erkennen, dann können Sie sicher sein, in was Sie schreiben müssen getElementById Teil der Eltern.

    Benutzer-Avatar
    Geldautomat Fahim

    *<tr><a href="https://stackoverflow.com/questions/4967223/javascript:void(0);" class="remove">X</a></tr>*
    <script type="text/javascript">
      $("table").on('click', '.remove', function () {
           $(this).parent().parent('tr').remove();
      });
    

    1114820cookie-checkLöschen Sie eine Zeile aus einer Tabelle nach ID

    This website is using cookies to improve the user-friendliness. You agree by using the website further.

    Privacy policy