2010-04-24 14 views
19

Mam table.Jquery dodać wiersz tabeli po wierszu, który dzwoni 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> 

I ten JavaScript.

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

To działa dobrze, to sprawia, że ​​tr po sobie table „s ostatni tr i umieszcza informacje o niej, a funkcja kasowania działa również w porządku.

Ale chciałbym, aby ten Dołącz POtr (z tdclass="icon"), który jest wywołanie skryptu. Jak mogę to zrobić?

+0

Chyba nie nadążam. zastosuj .next() lub następny ("tr"). PS: i nie musisz ponownie wybierać elementów więcej niż jeden raz. możesz zastąpić $ (document.createElement ('tr')) przez $ ('') .attr ('id', 'delete') – meo

+1

Tak, @meo. Zamiast $ ("# deleter") wiele razy, po prostu wykonaj var deleter = $ ("# deleter"); następnie za każdym razem używaj zmiennej referencyjnej. – Geoff

+0

fi wykonaj to za pomocą '$ ('# id_strony #' id) .after(). Append ($ (document.createElement (" tr ")). Attr ({id:" usuń "}));' lub z ' next() 'zostanie dodane wewnątrz' tr' po 'td class =" icon "'. –

Odpowiedz

33

Możesz użyć funkcji .after() w jQuery, aby dołączyć trochę treści po innym elemencie.

Więc zamiast

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

byłoby użyć

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

lub można też użyć

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

która jest zasadniczo równoważne.

Aby uzyskać szczegółowe informacje, patrz http://api.jquery.com/after/.

+0

'$ ('# id_strony_' + id) .after(). Append ('');' Nadal nie działa. Każdy inny pomysł? –

+0

Myślę, że musisz umieścić swój w after() i opuścić append(). –

+3

Tak, dodaj zawartość jako argument metody after, nie ma potrzeby stosowania metody append. Coś jak: var newTr = $ (""); $ ("# site_id _" + id) .after (newTr); newTr.append (someChildOfTr) .append (someOtherChildOfTr); – Geoff

0

interst tr id następnie onclick = "xyz()"

coś takiego:

<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> 
Powiązane problemy