2012-01-02 15 views

risposta

13

Se sto leggendo questo diritto, allora penso che tutto quello che avresti bisogno di fare è:

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

E poi ri-collegare il DomTreeCopy (al posto di quella originale):

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

o per aggiungere al DOM in aggiunta a quello originale:

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

Riferimenti:

+0

Grazie. Condividere un upvote, non contrassegnarlo come una risposta perfetta, dal momento che la clonazione non supporterà gli stili/gestori di eventi CSS? Ho ragione, per favore? – BreakPhreak

+1

Hai letto il materiale di riferimento per 'clone()'? Il primo argomento 'true, true' passato al metodo significa che copia i dati e gli eventi associati agli elementi.Il primo 'true' si applica all'elemento clonato e il secondo' true' ai figli dell'elemento clonato. Finché il tuo foglio di stile supporta i selettori abbinati agli elementi clonati allora sì, i CSS si applicano/si applicano automaticamente. –

+0

Grazie per avermi segnalato alcuni dettagli mancanti. – BreakPhreak

1

è possibile utilizzare $.data() ... metodo

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

questo è stato è possibile archiviare tutto il livello qualitativo che si desidera in un tipo di dizionario - e poi riutilizzare in un secondo momento.

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

+0

Ohh .. Questo è più valido e corretto! –

0

È possibile memorizzare l'oggetto clonato da qualche altra parte nel DOM. Modifica il DOM che è visibile. Quando richiedi il valore reale, puoi rintracciarlo dal luogo in cui ti sei aggiunto.

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

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

quindi, di monitorare il DOM originale con $("#oldInfo")

8

Utilizzando semplice JavaScript:

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

Nota che utilizzando questo metodo, i gestori di eventi sono non ripristinati. Ma puoi anche aiutarli, dal momento che sono solo funzioni ordinarie.

Si scopre che mi sono sbagliato. I gestori di eventi vengono mantenuti poiché è il DOM originale che stai ripristinando. Se si stava copiando e aggiungendolo altrove, i gestori di eventi non verrebbero copiati. This demo indica che il gestore eventi rimane.

+0

Puoi per favore approfondire l'argomento sui gestori di eventi? – BreakPhreak

+1

@BreakPhreak Sembra che mi sbagliassi. Vedi la mia risposta. –

Problemi correlati