2010-02-25 3 views
23

Mit JQuery ist es möglich, ein Div wie folgt zu klonen und ändern Sie einen neuen Bezeichner zu seiner ID und alle seine Kinder IDs?Clone ein Div und ändern Sie die IDs von ihm und alle seine Kinder eindeutig

Zum Beispiel würde Ich mag Lage sein, dies zu klonen:

<div id="current_users"> 
<table id="user_list"> 
<tr id="user-0"> 
<td id="first_name-0">Jane</td> 
<td id="last_name-0">Doe</td> 
</tr> 
<tr id="user-1"> 
<td id="first_name-1">John</td> 
<td id="last_name-1">Doe</td> 
</tr> 
</table> 
</div> 

Und habe es wie folgt aussehen:

<div id="current_users_cloned"> 
<table id="user_list_cloned"> 
<tr id="user-0_cloned"> 
<td id="first_name-0_cloned">Jan</td> 
<td id="last_name-0_cloned">Doe</td> 
</tr> 
<tr id="user-1_cloned"> 
<td id="first_name-1_cloned">John</td> 
<td id="last_name-1_cloned">Doe</td> 
</tr> 
</table> 
</div> 

Oder soll ich nur meine Struktur zu überdenken und rel Attribute verwenden und wiederverwendbare Klassenerklärungen?

Danke,

Tegan Snyder

Antwort

40
$("#current_users").clone(false).find("*[id]").andSelf().each(function() { $(this).attr("id", $(this).attr("id") + "_cloned"); }); 

Und Ihre Ereignisse sehen, ob es irgendwelche angebracht sind. Sie müssen sie reparieren, wenn sie sich auf IDs verlassen.

+1

Danke, das ist genau das, was ich gesucht habe. Es funktioniert großartig. –

+4

Sie könnten das ein Haar mehr trocken machen, indem Sie die Funktionsform von 'attr()' verwenden: '$ (this) .attr ('id', Funktion (i, id) {return id +" _ cloned ";});' – Phrogz

+1

Danke. Dein Code speichert meine Hunderte von Zeilen. :) – Roopendra

1

Wenn Sie nicht wirklich jeden dieser geklonten DIVs per Code identifizieren müssen, würde ich Ihre IDs durch wiederverwendbare Klassen ersetzen. Sonst sieht die Antwort von David Morton so aus, als könnte es den Trick machen.

+0

Ja, ich stimme zu. Für das, was ich mache, brauche ich die Einzigartigkeit :) Danke für Ihren Vorschlag. –