2010-08-26 24 views
94

Tôi biết làm thế nào để thêm hoặc thêm vào trước một hàng mới vào một bảng sử dụng jquery:Jquery chèn dòng mới vào bảng tại một chỉ số nhất định

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

Làm thế nào để tôi chèn hàng (được đưa ra trong biến html) vào "chỉ mục hàng" cụ thể i. Vì vậy, nếu ví dụ: i=3, hàng sẽ được chèn dưới dạng hàng thứ 4 trong bảng.

+0

không giống nhau, nhưng liên quan đến http://stackoverflow.com/questions/171027/add-table-row-in-jquery –

Trả lời

132

Bạn có thể sử dụng .eq().after() như thế này:

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

Các chỉ số là 0 dựa, do đó là hàng thứ 4, bạn cần i-1, vì .eq(3) sẽ là hàng thứ 4, bạn cần phải quay trở lại đến hàng thứ 3 (2) và chèn .after().

+7

Cần lưu ý rằng nếu hàm eq của jQuery được đưa ra một giá trị âm, nó sẽ lặp lại ở cuối bảng. Vì vậy, chạy và cố gắng chèn nó vào chỉ mục 0 sẽ làm cho hàng mới được chèn vào cuối – rossisdead

+2

Và thêm '.before (html)' nếu bạn muốn chèn nó trước chỉ mục đó – Abhi

+1

điều này không thành công, nếu không có các hàng trong bảng, có ai có giải pháp (chỉ mục dựa trên) hoạt động ngay cả đối với hàng đầu tiên không? – MartinM

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

Điều này sẽ luôn dẫn đến một chỉ mục nằm ngoài phạm vi ngoại lệ. –

14

Hãy thử điều này:

var i = 3; 

$('#my_table > tbody > tr:eq(' + i + ')').after(html); 

hay này:

var i = 3; 

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

hay này:

var i = 4; 

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

Tất cả những sẽ đặt hàng ở vị trí tương tự. nth-child sử dụng chỉ mục dựa trên 1.

0

Sử dụng eq selector để selct hàng thứ n (dựa trên 0) và thêm hàng của bạn sau khi sử dụng after, vì vậy:

$('#my_table > tbody:last tr:eq(2)').after(html); 

nơi html là một tr

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

thử điều này:

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

Lưu ý:

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

tôi biết nó đến trễ nhưng đối với những người muốn thực hiện nó hoàn toàn bằng cách sử dụng JavaScript, dưới đây là cách bạn có thể làm điều đó:

  1. Lấy tham chiếu đến hiện tại tr mà được nhấp.
  2. Tạo thành phần DOM tr mới.
  3. Thêm nó vào nút được giới thiệu tr mẹ.

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> 

Trong 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ày sẽ bổ sung thêm các dòng của bảng mới chính xác dưới dòng mà trên đó các nút được nhấp.

Các vấn đề liên quan