javascript cloneNode и свойства - PullRequest
       21

javascript cloneNode и свойства

0 голосов
/ 04 ноября 2010

Существует ли быстрый способ «супер» глубокого клонирования узла, включая его свойства?(и методы, я думаю)

У меня есть что-то вроде этого:

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

var theClone = theSource.cloneNode(true);

alert(theClone.dictator); 

Новый клонированный объект не имеет свойства dictator.Теперь, скажем, у меня есть тысяча свойств, прикрепленных к theSource - как я могу (не явно) перенести / скопировать их в клон?

// EDIT

@ Fabrizio

Ваш hasOwnProperty ответ не работает должным образом, поэтому я настроил его.Это решение, которое я искал:

temp = obj.cloneNode(true);

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

1 Ответ

2 голосов
/ 04 ноября 2010

вероятно, лучший способ сохранить множество свойств - это создать объект свойства, в котором вы можете сохранить все свойства, например,

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

тогда вам нужно скопировать только одно свойство

theclone.myproperties = thesource.myproperties

в противном случае выполните цикл for для всех сохраненных вами свойств

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