2010-11-04 25 views
0

Existe-t-il un moyen rapide de "super" cloner en profondeur un noeud, y compris ses propriétés? (Et les méthodes, je suppose)javascript cloneNode et propriétés

J'ai quelque chose comme ceci:

var theSource = document.getElementById("someDiv") 
theSource.dictator = "stalin"; 

var theClone = theSource.cloneNode(true); 

alert(theClone.dictator); 

Le nouvel objet cloné n'a pas de propriété dictator. Maintenant, disons que j'ai un millier de propriétés attachées à theSource - comment puis-je (non explicitement) les transférer/copier au clone?

// EDIT

@Fabrizio

Votre hasOwnProperty réponse ne fonctionne pas correctement, donc j'ajusta. C'est la solution que je cherchais:

temp = obj.cloneNode(true); 

for(p in obj) { 
    if(obj.hasOwnProperty(p)) { eval("temp."+p+"=obj."+p); } 
} 

Répondre

2

probablement la meilleure façon d'économiser beaucoup de propriétés est de créer un objet de propriété dans laquelle vous pouvez stocker toutes les propriétés par exemple

thesource.myproperties = {} 
thesource.myproperties.dictator1 = "stalin"; 
thesource.myproperties.dictator2 = "ceasescu"; 
thesource.myproperties.dictator3 = "Berlusconi"; 
... 

alors vous devez simplement copier une propriété

theclone.myproperties = thesource.myproperties 

autrement faire un cycle for pour toutes les propriétés que vous avez enregistré

for (p in thesource) { 
    if (thesource.hasOwnProperty(p)) { 
    theclone.p = thesource.p; 
    } 
}