Jquery memasukkan baris baru ke dalam tabel pada indeks tertentu

113

Saya tahu cara menambahkan atau menambahkan baris baru ke dalam tabel menggunakan jquery:

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

Bagaimana cara menyisipkan baris (diberikan dalam variabel html) ke dalam "indeks baris" tertentu i. Jadi jika i=3, misalnya, baris tersebut akan disisipkan sebagai baris ke-4 dalam tabel.

aeq
sumber
tidak sama, tetapi terkait dengan stackoverflow.com/questions/171027/add-table-row-in-jquery
Nathan Koop

Jawaban:

158

Anda dapat menggunakan .eq()dan .after()menyukai ini:

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

Indeksnya berbasis 0, jadi untuk menjadi baris ke-4, Anda perlu i-1, karena .eq(3)akan menjadi baris ke-4, Anda harus kembali ke baris ke-3 ( 2) dan memasukkannya .after().

Nick Craver
sumber
8
Perlu diperhatikan bahwa jika fungsi eq jQuery diberi nilai negatif, fungsi tersebut akan berputar ke ujung tabel. Jadi menjalankan ini dan mencoba memasukkannya pada indeks 0 akan menyebabkan baris baru disisipkan di akhir
rossisdead
2
Dan tambahkan .before(html)jika Anda ingin memasukkannya sebelum indeks itu
Abhi
1
gagal, jika tidak ada baris dalam tabel, apakah ada yang punya solusi (berbasis indeks) yang berfungsi bahkan untuk baris pertama?
MartinM
@MartinM jika Anda memasukkan bahkan jika tidak ada baris , maka itu skenario yang sama sekali berbeda (di mana indeks tidak penting?) - apakah Anda ingin menambahkan ke bagian akhir apa pun yang terjadi?
Nick Craver
@NickCraver, tidak, saya hanya mencari solusi berbasis indeks umum (seperti ini), tetapi tabel saya kosong pada awalnya .. Saya dapat, tentu saja memeriksa, jika tabel kosong dan menyisipkan baris pertama dan kemudian melanjutkan dengan metode Anda, tetapi ini tampaknya tidak menarik bagi saya ..
MartinM
17

Coba ini:

var i = 3;

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

atau ini:

var i = 3;

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

atau ini:

var i = 4;

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

Semua ini akan menempatkan baris pada posisi yang sama. nth-childmenggunakan indeks berbasis 1.

pengguna113716
sumber
4

catatan:

$('#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
Nilesh R. Makwana
sumber
4

Saya tahu ini akan datang terlambat tetapi bagi orang-orang yang ingin menerapkannya hanya dengan menggunakan JavaScript, berikut ini cara melakukannya:

  1. Dapatkan referensi ke arus tryang diklik.
  2. Buat trelemen DOM baru .
  3. Tambahkan ke trnode induk yang dirujuk .

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>

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

Ini akan menambahkan baris tabel baru tepat di bawah baris tempat tombol diklik.

Prateek
sumber
2

coba ini:

$("table#myTable tr").last().after(data);
Agus Puryanto
sumber
1

Gunakan pemilih eq untuk memilih baris ke-n (berbasis 0) dan tambahkan baris Anda setelahnya menggunakan setelah , jadi:

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

di mana html adalah tr

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

Menambah jawaban Nick Craver dan juga mempertimbangkan poin yang diangkat oleh Rossisdead, jika ada skenario seperti harus ditambahkan ke tabel kosong, atau sebelum baris tertentu, saya telah melakukan seperti ini:

var arr = []; //array
if (your condition) {
  arr.push(row.id); //push row's id for eg: to the array
  idx = arr.sort().indexOf(row.id);

  if (idx === 0) {   
    if (arr.length === 1) {  //if array size is only 1 (currently pushed item)
        $("#tableID").append(row);
    }
    else {       //if array size more than 1, but index still 0, meaning inserted row must be the first row
       $("#tableID tr").eq(idx + 1).before(row);
    }   
  }          
  else {     //if index is greater than 0, meaning inserted row to be after specified index row
      $("#tableID tr").eq(idx).after(row);
  }    
}

Semoga bisa membantu seseorang.

Jaggan_j
sumber
-1
$($('#my_table > tbody:last')[index]).append(html);
Eli Grey
sumber
4
Ini akan selalu menghasilkan indeks di luar rentang pengecualian.
Nick Craver