2011-12-23 10 views
12

Quiero clonar una fila de una tabla, pero cuando la clono, el nuevo elemento name y id será el mismo que el elemento desde el que se clonó.¿Es posible clonar elementos HTML en jQuery con ID y nombre nuevos?

Lo que necesito son los elementos clonados con un diferente name y id.

+2

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

+0

y más allá vinculado a toda la respuesta que se necesita. ¿Necesitas hacer 20 de ellos? Envuelva esa respuesta en un iterador y agregue el índice a la ID o algo similar. –

Respuesta

29

me lo pase prop un mapa de pares clave/valor para actualizar estos valores después de la clonación:

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

clonada elementos no existen en el DOM hasta que se agrega ellos, por lo que no va a tiene que preocuparse por duplicar id s hasta que lo haga.

Ejemplo:http://jsfiddle.net/BbpRA/

Actualización: En el comentario que dice que tiene 20 input s que necesita para clonar. Crearía una función que toma el elemento DOM y la nueva identificación y nombre. Incluso se puede hacer un pequeño plug-in fuera de él:

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

Uso:

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

pero tengo casi 20 cuadros de entrada que tengo que clonar –

+1

¿No debería ser '.attr ({...})' en su lugar? Ni la identificación ni el nombre son propiedades. Ambos son atributos. http://api.jquery.com/prop/ – techfoobar

+0

"attr" (en lugar de "prop") sería "más correcto", pero este es definitivamente el camino a seguir. –

1

Usted puede hacer algo como:

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

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

Una vez que su hecho, puede anexar x para siempre usted quiere.

Por favor, tenga en cuenta que el #selector anterior se refiere a su elemento de fila de la tabla.

6

usted podría intentar algo como esto:

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

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

puede automatizar su clon con cloneJS. Es solo una versión beta: CloneJS

Cuestiones relacionadas