jqueryは、特定のインデックスでテーブルに新しい行を挿入します


113

jqueryを使用してテーブルに新しい行を追加または追加する方法を知っています。

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

どのように私は特定の「行インデックス」へ(HTML変数で与えられた)行を挿入しますi。したがってi=3、たとえば、行がテーブルの4番目の行として挿入されます。


回答:


158

あなたは使用することができます.eq()し、.after()このように:

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

インデックスは、その4行目であることを、あなたはベース0必要があるi-1ことから、.eq(3)4行目となり、あなたは(3行目に戻って行く必要がある2)とを挿入.after()ことを。


8
jQueryのeq関数に負の値を指定すると、テーブルの最後までループします。したがって、これを実行して0インデックスに挿入しようとすると、新しい行が最後に挿入されます
rossisdead

2
.before(html)そのインデックスの前に挿入する場合は追加します
Abhi

1
これが失敗し、テーブルに行がない場合、誰かが最初の行でも機能する解決策(インデックスベース)を持っていますか?
MartinM 2014

@MartinM 行がない場合でも挿入する場合、それはまったく異なるシナリオです(インデックスは関係ありませんか?)-何があっても最後に追加しますか?
Nick Craver

@NickCraver、いいえ私は単にこのような一般的なインデックスベースのソリューションを探していますが、最初はテーブルが空です。もちろん、テーブルが空かどうかを確認し、最初の行を挿入してから続行しますあなたの方法が、これは私にellegantないようです...
MartinM

17

これを試して:

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-child1ベースのインデックスを使用します。


4

注意:

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

私はそれが遅れていることを知っていJavaScriptますが、純粋にを使用してそれを実装したい人のために、あなたがそれを行う方法は次のとおりです:

  1. trクリックされた現在への参照を取得します。
  2. 新しいtrDOM要素を作成します。
  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;
    }

これにより、ボタンがクリックされた行の真下に新しいテーブル行が追加されます。





0

Nick Craverの答えに加えて、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);
  }    
}

それが誰かを助けることを願っています。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.