¿Es posible clonar objetos de elementos html en JavaScript / JQuery?


100

Estoy buscando algunos consejos sobre cómo solucionar mi problema.

Tengo un elemento html (como el campo de entrada del cuadro de selección) en una tabla. Ahora quiero copiar el objeto y generar uno nuevo a partir de la copia, y eso con JavaScript o jQuery. Creo que esto debería funcionar de alguna manera, pero de momento no tengo ni idea.

Algo como esto (pseudo código):

oldDdl = $("#ddl_1").get(); 

newDdl = oldDdl;

oldDdl.attr('id', newId);

oldDdl.html();

3
stackoverflow.com/search?q=jquery+copy+element+content tiene un montón de preguntas relacionadas.
Felix Kling

Respuestas:


60

Usando su código, puede hacer algo como esto en JavaScript simple usando el método cloneNode () :

// Create a clone of element with id ddl_1:
let clone = document.querySelector('#ddl_1').cloneNode( true );

// Change the id attribute of the newly created element:
clone.setAttribute( 'id', newId );

// Append the newly created element on element p 
document.querySelector('p').appendChild( clone );

O usando el método jQuery clone () (no es el más eficiente):

$('#ddl_1').clone().attr('id', newId).appendTo('p'); // append to where you want

30
Es MUY importante modificar el ID cuando clona un elemento.
Dragos Durlut

285

Con JavaScript nativo:

newelement = element.cloneNode(bool)

donde el booleano indica si clonar nodos secundarios o no.

Aquí está la documentación completa sobre MDN .


50
la mejor respuesta. no use jquery donde no lo necesite.
luschn

Se ve bien ... pero la compatibilidad del navegador es cuestionable a día de hoy.
Aniket Suryavanshi

13
@AniketSuryavanshi No estoy seguro sobre el 4 de febrero en particular, pero la compatibilidad parece perfecta hoy

2
Se duplicarán las identificaciones y los nombres. Los ID DEBEN cambiarse, los nombres PODRÍAN dejarse como están si se esperan nombres duplicados.
przemo_li

Lástima que pierda todos los atributos: /
Pieter De Bie

16

Sí, puede copiar elementos secundarios de un elemento y pegarlos en el otro elemento:

var foo1 = jQuery('#foo1');
var foo2 = jQuery('#foo2');

foo1.html(foo2.children().clone());

Prueba: http://jsfiddle.net/de9kc/


Las ID duplicadas serán un problema con su enfoque
przemo_li

4

En realidad, es muy fácil en jQuery:

$("#ddl_1").clone().attr("id",newId).appendTo("body");

Cambiar .appendTo () por supuesto ...




0

En una línea:

$('#selector').clone().attr('id','newid').appendTo('#newPlace');

1
No creo que eso ayude, ya que el valor de su atributo es una cadena que no cambiará.
Jamie R Rytlewski

0

Debe seleccionar "# foo2" como su selector. Luego, consígalo con html ().

Aquí está el html:

<div id="foo1">

</div>
<div id="foo2">
    <div>Foo Here</div>
</div>​

Aquí está el javascript:

$("#foo2").click(function() {
    //alert("clicked");
    var value=$(this).html();
    $("#foo1").html(value);
});​

Aquí está el jsfiddle: http://jsfiddle.net/fritzdenim/DhCjf/

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.