2010-08-30 32 views
24

Tôi có cấu trúc bảng sau đây.Cách thêm mới <tr> sau <tr>

<table> 
    <tr> 
     <td><a href="#"></td> 
    </tr> 
</table> 

Khi tôi bấm vào <a> Tôi muốn thêm mới <tr> bên cạnh <tr> trong đó <a> được nhấp.

Vì vậy, kết quả sẽ là:

<table> 
    <tr> 
     <td><a href="#"></td> 
    </tr> 
    <tr> 
     <td><a href="#"></td> 
    </tr> 
</table> 

Trả lời

44

Ví dụ:

$('a').bind('click', function(){ 
    $('<tr><td>new td</td></tr>').insertAfter($(this).closest('tr')); 
}); 

Nếu bạn muốn tạo một sử dụng bản sao:

$('a').live('click', function(){ 
    var $this  = $(this), 
     $parentTR = $this.closest('tr'); 

    $parentTR.clone().insertAfter($parentTR); 
}); 

Ví dụ link: http://www.jsfiddle.net/7A6MQ/

Về cơ bản , bạn tạo một bản sao từ tr element (bao gồm các nút con) và chèn bản sao đó sau phần tử đó. Do đó, bạn cần gắn kết .live để đảm bảo rằng các phần tử a mới được tạo cũng gọi trình xử lý nhấp chuột đó.

Ref .: .clone(), .insertAfter(), .live()

+0

jAndy - Bạn không cần '.live()' cho ví dụ thứ hai của bạn. Chỉ cần làm '.clone (true)', và nó nhân bản tất cả các dữ liệu liên quan. http://www.jsfiddle.net/7A6MQ/1/ – user113716

5

Ngoài ra, bạn có thể viết:

$('a').bind('click', function() { 
    $(this).closest('tr').after('<tr><td>new td<td></tr>'); 
}); 

Không quá nhiều sự khác biệt nhưng trông dễ đọc hơn.

1

Đây là mã. Vui lòng kiểm tra và cho tôi biết nếu có bất kỳ vấn đề nào.

function AddRaw(obj){ 
var $this  = obj; 
$parentTR = $this.closest('tr'); 
$parentTR.clone().insertAfter($parentTR); 
} 
+0

chức năng RemoveRaw (obj) { \t //alert(obj.parent(). parent(). html()); \t nếu (obj.closest ('tr') [0] .rowIndex == 0) { \t \t cảnh báo ("Không thể xóa nguyên này"); \t} else { \t obj.parent(). Parent(). Remove(); \t}} –

+0

$ (document) .ready (function() { \t $ ("# submit") click (function() { \t \t // alert ("hi");. \t \t var len . = $ ("# DataTable tr") chiều dài; \t \t var data = ""; \t \t for (var i = 0; i

+0

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