2010-04-24 41 views
19

Tôi có một số table.Jquery thêm hàng của bảng sau hàng gọi jquery

<table id="servers" ...> 
... 
{section name=i loop=$ownsites} 
<tr id="site_id_{$ownsites[i].id}"> 
... 
<td>{$ownsites[i].phone}</td> 
<td class="icon"><a id="{$ownsites[i].id}" onClick="return makedeleterow(this.getAttribute('id'));" ...></a></td> 
</tr>  
{/section} 
<tbody> 
</table> 

Và JavaScript này.

<script type="text/javascript"> 
function makedeleterow(id) 
    { 
     $('#delete').remove(); 
     $('#servers').append($(document.createElement("tr")).attr({id: "delete"})); 
     $('#delete').append($(document.createElement("td")).attr({colspan: "9", id: "deleter"})); 
     $('#deleter').text('Biztosan törölni szeretnéd ezt a weblapod?'); 
     $('#deleter').append($(document.createElement("input")).attr({type: "submit", id: id, onClick: "return truedeleterow(this.getAttribute('id'))"})); 
     $('#deleter').append($(document.createElement("input")).attr({type: "hidden", name: "website_del", value: id})); 
    } 
</script> 

Nó làm việc tốt, nó làm cho một tr sau table 's cuối cùng tr và đưa thông tin đến nó, và các chức năng xóa cũng hoạt động tốt.

Nhưng tôi muốn làm append này SAU các tr (với tdclass="icon") được gọi kịch bản. Tôi có thể làm cái này như thế nào?

+0

tôi nghĩ rằng tôi không theo dõi mình. đặt sử dụng .next() hoặc tiếp theo ('tr') tôi đoán. PS: và bạn không phải chọn lại bạn các yếu tố nhiều hơn một lần. bạn có thể thay thế $ (document.createElement ('tr')) bởi $ ('') .attr ('id', 'delete') – meo

+1

Có, @meo. Thay vì $ ("# deleter") nhiều lần, chỉ cần làm var deleter = $ ("# deleter"); sau đó sử dụng tham chiếu biến mỗi lần. – Geoff

+0

fi thực hiện điều này với '$ ('# site_id _' + id). After(). Append ($ (document.createElement (" tr ")). Attr ({id:" delete "}));' hoặc bằng ' next() 'nó sẽ nối thêm bên trong' tr' sau 'td class =" icon "'. –

Trả lời

33

Bạn có thể sử dụng hàm .after() trong jQuery để nối thêm một số nội dung sau phần tử khác.

Vì vậy, thay vì

$("servers").append(...); 

bạn sẽ sử dụng

$("#" + id +).closest("tr").after(...); 

hoặc bạn cũng có thể sử dụng

$(...).insertAfter($("#" + id).closest("tr")); 

mà chủ yếu là tương đương.

Xem http://api.jquery.com/after/ để biết chi tiết đầy đủ.

+0

'$ ('# site_id _' + id) .after(). Chắp thêm ('');' Vẫn không hoạt động. Bạn có ý tưởng nào khác không? –

+0

Tôi nghĩ rằng bạn cần phải đặt vào sau() và bỏ phần nối thêm(). –

+3

Vâng, hãy thêm nội dung làm đối số của phương thức sau, không cần phương thức chắp thêm. Một cái gì đó như: var newTr = $ (""); $ ('# site_id _' + id). after (newTr); newTr.append (someChildOfTr) .append (someOtherChildOfTr); – Geoff

3

thử .prepend() thay vì .append()

0

interst tr id sau đó onclick = "xyz()"

một cái gì đó như thế này:

<tr id="" onclick="xyz()"><td></td><td></td></tr> 
<script> 
    function xyz() 
    { 
    var newrow = "<tr><td>data1</td><td>data1</td></tr>";   
    $("#tr_id").after(newrow); 
    } 
</script> 
Các vấn đề liên quan