Jquery вставить новую строку в таблицу по определенному индексу



Я знаю, как добавить или вставить новую строку в таблицу с помощью jQuery:



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


как вставить строку (заданную в переменной html) в определенный "индекс строки"i. Так что если i=3, например, строка будет вставлена как 4-я строка в таблице.

867   9  

9 ответов:

можно использовать .eq() и .after() такой:

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

индексы основаны на 0, поэтому, чтобы быть 4-й строкой, вам нужно i-1 С .eq(3) будет 4-й строке, нужно вернуться к 3-й строке (2) и вставить .after() что.

попробуйте это:

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 , вот как вы можете сделать это:

  1. получить ссылку на текущий tr что нажал.
  2. создать новый tr элемент DOM.
  3. добавить его в указанный 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

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

попробуйте это:

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

добавление к ответу Ника Крейвера, а также учитывая точку, поднятую 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);
  }    
}

надеюсь, что это поможет кому-то.

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

Comments

    Ничего не найдено.