2010-08-26 14 views
94

wiem, jak dołączyć lub poprzedzić nowy wiersz do tabeli przy użyciu jQuery:Jquery wstawić nowy wiersz do tabeli w określonym indeksie

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

Jak wstawić wiersz (podane w zmiennej html) do określony "indeks wierszy" i. Jeśli na przykład i=3, wiersz zostanie wstawiony jako 4. wiersz w tabeli.

+0

Nie to samo, ale związane z http://stackoverflow.com/questions/171027/add-table-row-in-jquery –

Odpowiedz

132

Można użyć .eq() i .after() takiego:

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

Indeksy są 0, tak więc być 4. wiersz, trzeba i-1, ponieważ .eq(3) byłoby 4th wiersz, trzeba wrócić do trzeciego wiersza (2) i wstaw tę .after().

+7

Należy zauważyć, że jeśli funkcja eq jQuery ma wartość ujemną, zostanie ona przeniesiona na koniec tabeli. Uruchomienie tego i próba wstawienia go do indeksu 0 spowoduje wstawienie nowego wiersza pod koniec – rossisdead

+2

I dodaj '.przed (html)' jeśli chcesz wstawić go przed tym indeksem – Abhi

+1

to się nie powiedzie, jeśli nie ma wiersze w tabeli, czy ktoś ma rozwiązanie (oparte na indeksie), które działa nawet w pierwszym wierszu? – MartinM

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

Powoduje to zawsze wyjątek indeksu poza zakresem. –

14

Spróbuj tego:

var i = 3; 

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

lub to:

var i = 3; 

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

lub to:

var i = 4; 

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

Wszystko to będzie umieścić wiersz w tej samej pozycji. nth-child używa indeksu opartego na 1.

0

Użyj eq selector do selct n-ty wiersz (0-based) i dodać wiersz po użyciu after, więc:

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

gdzie HTML jest tr

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

spróbuj tego:

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

Uwaga:

$('#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

wiem, że to zbyt późno, ale dla tych ludzi, którzy chcą wdrożyć go wyłącznie za pomocą JavaScript, oto jak można to zrobić:

  1. Get odniesienia do aktualnej tr który kliknął.
  2. Utwórz nowy element DOM tr.
  3. Dodaj go do określonego węzła nadrzędnego tr.

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> 

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

Spowoduje to dodanie nowej tabeli wiersz dokładnie poniżej wiersza, w którym kliknięciu przycisku.

Powiązane problemy