2010-08-26 3 views
94

Ich weiß, wie anhänge oder eine neue Zeile in eine Tabelle mit Jquery setzt:JQuery einfügen neue Zeilen in der Tabelle zu einem bestimmten Index

$('#my_table > tbody:last').append(html); 

Wie ich die Zeile einfügen (in dem HTML-Variable angegeben) in ein spezifischer "Zeilenindex" i. Wenn also zum Beispiel i=3 wird, wird die Zeile als vierte Zeile in die Tabelle eingefügt.

+0

nicht das gleiche, aber im Zusammenhang mit http://stackoverflow.com/questions/171027/add-table-row-in-jquery –

Antwort

132

Sie können .eq() und .after() wie folgt verwenden:

$('#my_table > tbody > tr').eq(i-1).after(html); 

Die Indizes sind 0 basiert, so dass die vierte Reihe zu sein, müssen Sie i-1, da .eq(3) die 4. Reihe sein würde, Sie müssen zurück gehen in die 3. Reihe (2) und einfügen .after() dass.

+7

Es sollte beachtet werden, dass, wenn jQuery eq-Funktion einen negativen Wert gegeben wird, es bis zum Ende der Tabelle Schleife wird. Wenn Sie dies ausführen und versuchen, es in den Index 0 einzufügen, wird die neue Zeile am Ende eingefügt. – rossisdead

+2

Und '.before (html)' hinzufügen, wenn Sie es vor dem Index einfügen möchten – Abhi

+1

dies schlägt fehl, wenn es keine gibt Zeilen in der Tabelle, hat jemand eine Lösung (indexbasiert), die sogar für die erste Zeile funktioniert? – MartinM

-1
$($('#my_table > tbody:last')[index]).append(html); 
+4

Dies würde immer zu einem Index außerhalb des Bereichs Ausnahme führen. –

14

Versuchen Sie folgendes:

var i = 3; 

$('#my_table > tbody > tr:eq(' + i + ')').after(html); 

oder dies:

var i = 3; 

$('#my_table > tbody > tr').eq(i).after(html); 

oder dies:

var i = 4; 

$('#my_table > tbody > tr:nth-child(' + i + ')').after(html); 

All dies wird die Zeile in der gleichen Position. nth-child verwendet einen 1-basierten Index.

0

Verwenden Sie die eq selector selct die n-te Zeile (0-basiert) und Ihre Zeile hinzufügen, nachdem es after verwenden, so:

$('#my_table > tbody:last tr:eq(2)').after(html); 

wo html ein tr ist

0
$('#my_table tbody tr:nth-child(' + i + ')').after(html); 
0

dies versuchen:

$("table#myTable tr").last().after(data); 
2

Hinweis:

$('#my_table > tbody:last').append(newRow); // this will add new row inside tbody 

$("table#myTable tr").last().after(newRow); // this will add new row outside tbody 
              //i.e. between thead and tbody 
              //.before() will also work similar 
0

Ich weiß, es kommt spät, aber für diejenigen, die es rein mit der JavaScript implementieren möchten, hier ist, wie Sie es tun können:

  1. den Verweis auf die aktuelle tr erhalten, die angeklickt wird.
  2. Erstellen Sie ein neues tr DOM-Element.
  3. Fügen Sie es dem angegebenen übergeordneten Knoten tr hinzu.

HTML:

<table> 
    <tr> 
        <td> 
         <button id="0" onclick="addRow()">Expand</button> 
        </td> 
        <td>abc</td> 
        <td>abc</td> 
        <td>abc</td> 
        <td>abc</td> 
    </tr> 

    <tr> 
        <td> 
         <button id="1" onclick="addRow()">Expand</button> 
        </td> 
        <td>abc</td> 
        <td>abc</td> 
        <td>abc</td> 
        <td>abc</td> 
    </tr> 
    <tr> 
        <td> 
         <button id="2" onclick="addRow()">Expand</button> 
        </td> 
        <td>abc</td> 
        <td>abc</td> 
        <td>abc</td> 
        <td>abc</td> 
    </tr> 

In JavaScript:

function addRow() { 
     var evt = event.srcElement.id; 
     var btn_clicked = document.getElementById(evt); 
     var tr_referred = btn_clicked.parentNode.parentNode; 
     var td = document.createElement('td'); 
     td.innerHTML = 'abc'; 
     var tr = document.createElement('tr'); 
     tr.appendChild(td); 
     tr_referred.parentNode.insertBefore(tr, tr_referred.nextSibling); 
     return tr; 
    } 

Dies wird die neue Tabellenzeile genau unterhalb der Zeile hinzufügen, auf dem die Schaltfläche geklickt wird.

Verwandte Themen