2012-01-02 17 views

Respuesta

13

Si estoy leyendo esto, entonces creo que todo lo que tenía que hacer es:

var DomTreeCopy = $('parentElementSelector').clone(true,true); 

Y a continuación, volver a colocar el DomTreeCopy (en lugar del original):

$('parentElementSelector').replaceWith(DomTreeCopy); 

o para añadirlo a la DOM, además de los originales:

$(DomTreeCopy).insertAfter($('parentElementSelector')); 

Referencias:

+0

Gracias. ¿Compartir un voto ascendente, no marcar como una respuesta perfecta, ya que la clonación no admite estilos CSS/controladores de eventos? Estoy en lo correcto, por favor? – BreakPhreak

+1

¿Has leído el material de referencia para 'clone()'? Los primeros argumentos "verdaderos, verdaderos" que se pasan al método significa que copia datos y eventos vinculados a los elementos.El primer 'verdadero' se aplica al elemento clonado, y el segundo 'verdadero' a los elementos secundarios del elemento clonado. Siempre que su hoja de estilo sea compatible con selectores que coincidan con los elementos clonados, entonces sí, CSS se aplicará/se aplicará automáticamente. –

+0

Gracias por indicarme algunos detalles faltantes. – BreakPhreak

1

puede utilizar $.data() ... método

$.data(document.body, "sortElement", "0"); //set value 
    $.data(document.body, "sortElement");  //read value 

esto era usted puede almacenar todo waht que quieres en un tipo de diccionario - y luego volver a utilizarlo más adelante.

http://api.jquery.com/jQuery.data/

+0

Ohh .. ¡Esto es más válido y correcto! –

0

Puede almacenar el objeto clonado en otro lugar del DOM. Modificar el DOM que está visible. Cuando requiera el valor real, puede rastrearlo desde el lugar donde lo ha agregado.

<div id="oldInfo"></div> 

$("#youActualDom").clone().appendTo("#oldInfo").hide(); 

A continuación, realizar el seguimiento del dom original con $("#oldInfo")

8

Uso de JavaScript simple:

var elem = document.getElementById('theElement'), 
    backupElem = elem.cloneNode(true); 
// Your tinkering with the original 
elem.parentNode.replaceChild(backupElem, elem); 

Working demo

MDN - cloneNode

MDN - replaceChild

Tenga en cuenta que con este método, sus controladores de eventos son no restaurados. Pero también puedes respaldarlos, ya que son solo funciones normales.

Resulta que estaba equivocado al respecto. Los controladores de eventos se conservan porque es el DOM original que está restaurando. Si estaba copiando y anexándolo a otro lugar, los controladores de eventos no se copiarían. This demo muestra que el controlador de eventos permanece.

+0

¿Puede dar más detalles sobre los controladores de eventos? – BreakPhreak

+1

@BreakPhreak Parece que estaba equivocado al respecto. Ver mi respuesta –