jQuery在特定索引处将新行插入表中


Answers:


158

你可以用.eq().after()这样的:

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

索引是从0开始的,因此要成为第4行,i-1由于.eq(3)需要是第4行,因此您需要返回到第3行(2)并将其插入.after()


8
应该注意的是,如果给jQuery的eq函数赋予负值,它将循环到表的末尾。因此,在运行此,并试图将其插入的0指数将使在年底要插入新行
rossisdead

2
并添加.before(html)如果你想要那个索引之前,将其插入
ABHI

1
这会失败,如果表中没有行,是否有人有一个解决方案(基于索引)甚至对第一行也有效?
MartinM 2014年

@MartinM如果即使没有行也要插入,那是完全不同的情况(索引无关紧要?)-您想附加到末尾吗?
尼克·克拉弗

@NickCraver,不,我只是在寻找基于索引的常规解决方案(像这样),但是我的表在开始时是空的。我当然可以检查表是否为空,然后插入第一行,然后继续执行您的方法,但对我来说似乎并不那么好。
MartinM 2014年

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-child使用基于1的索引。


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

这将在单击按钮的行的正下方添加新表行。




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

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

希望它能帮助某人。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.