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.


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().


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.


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

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.



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


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

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.


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

4
Ini akan selalu menghasilkan indeks di luar rentang pengecualian.
Nick Craver
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.