Jquery вставить новую строку в таблицу по определенному индексу
Я знаю, как добавить или вставить новую строку в таблицу с помощью jQuery:
$('#my_table > tbody:last').append(html);
как вставить строку (заданную в переменной html) в определенный "индекс строки"i. Так что если i=3, например, строка будет вставлена как 4-я строка в таблице.
9 ответов:
попробуйте это:
var i = 3; $('#my_table > tbody > tr:eq(' + i + ')').after(html);или такой:
var i = 3; $('#my_table > tbody > tr').eq( i ).after(html);или такой:
var i = 4; $('#my_table > tbody > tr:nth-child(' + i + ')').after(html);все они разместят строку в том же положении.
nth-childиспользует индекс на основе 1.
Примечание:
$('#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
Я знаю, что это поздно, но для тех людей, которые хотят реализовать его чисто с помощью
JavaScript, вот как вы можете сделать это:
- получить ссылку на текущий
trчто нажал.- создать новый
trэлемент DOM.- добавить его в указанный
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>В 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; }добавить новую строку таблицы точно ниже строка, на которой нажата кнопка.
использовать эквалайзер селектор чтобы выбрать N-ю строку (на основе 0) и добавить свою строку после нее с помощью после, так:
$('#my_table > tbody:last tr:eq(2)').after(html);где html-это
tr
добавление к ответу Ника Крейвера, а также учитывая точку, поднятую rossisdead, если сценарий существует, как нужно добавить к пустой таблице или перед определенной строкой, я сделал так:
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); } }надеюсь, что это поможет кому-то.
Comments