2011-12-23 11 views
12

Voglio clonare una riga di una tabella, ma quando clonato, il nuovo elemento name e id sarà uguale all'elemento da cui è stato clonato.È possibile clonare elementi HTML in jQuery con nuovo ID e nome?

Quello che mi serve sono gli elementi clonati con un diverso name e id.

+2

la risposta è http://stackoverflow.com/questions/1339730/is-there-a-way-to-clone-elements-using-jquery. – anson

+0

andbeyond collegato a tutte le risposte necessarie. Hai bisogno di fare 20 di loro? Avvolgi la risposta in un iteratore e aggiungi l'indice all'ID o qualcosa di simile. –

risposta

29

sarei passato prop una mappa di coppie chiave/valore di aggiornare tali valori dopo la clonazione:

$("#selector").clone().prop({ id: "newId", name: "newName"}); 

Cloned elementi non esistono nel DOM finché non si aggiunge, in modo che non hai intenzione di devi preoccuparti di duplicare id s fino a farlo.

Esempio:http://jsfiddle.net/BbpRA/

Aggiornamento: Nel commento che dici di avere 20 input s è necessario clonare. Creerei una funzione che prende l'elemento DOM e il nuovo id e nome. Si potrebbe anche fare un piccolo plug-in fuori di esso:

(function($) { 
    $.fn.cloneWithProperties = function (properties) { 
     return this.clone().prop(properties); 
    }; 
})(jQuery) 

Usage:

$("#selector").cloneWithProperties({ id: "newId", name: "newName" }); 
+0

ma ho quasi 20 caselle di input che devo clonare –

+1

Non dovrebbe essere ".attr ({...})" invece? Né id né nome sono proprietà. Entrambi sono attributi. http://api.jquery.com/prop/ – techfoobar

+0

"attr" (invece di "prop") sarebbe "più corretto", ma questa è sicuramente la strada da percorrere. –

1

Si può fare qualcosa di simile:

var x = $("#selector").clone(); 

x.find('#oldID1').attr({id: "newID1", name: "newName1"}); 
x.find('#oldID2').attr({id: "newID2", name: "newName2"}); 
... 

volta che il suo farsi, è possibile aggiungere x ovunque tu vuoi.

Si noti che il #selector sopra si riferisce all'elemento di riga della tabella.

6

si potrebbe provare qualcosa di simile:

<div class="container"> 
    <div class="goodbye"> 
    Goodbye 
    <div id="h1" class="hello">Hello</div> 
    </div> 
</div> 

$('#h1').clone().attr('id','h2').appendTo('.container'); 
0

È possibile automatizzare il vostro clone con cloneJS. È solo una versione beta: CloneJS

Problemi correlati