0

プロパティを含め、ノードを「スーパー」ディープクローンする簡単な方法はありますか?(そして方法、私は推測する)

私はこのようなものを持っています:

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

var theClone = theSource.cloneNode(true);

alert(theClone.dictator); 

新しく複製されたオブジェクトにはdictatorプロパティがありません。さて、私が千のプロパティをアタッチしているとしましょうtheSource-どうすればそれらを(非明示的に)クローンに転送/コピーできますか?

// 編集

@Fabrizio

あなたのhasOwnProperty答えは正しく機能しないので、私はそれを調整しました。これは私が探していた解決策です:

temp = obj.cloneNode(true);

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

1 に答える 1

2

多くのプロパティを保存するためのおそらく最良の方法は、すべてのプロパティを保存できるプロパティオブジェクトを作成することです。

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

次に、1つのプロパティだけをコピーする必要があります

theclone.myproperties = thesource.myproperties

それ以外の場合は、for保存したすべてのプロパティに対してサイクルを実行します

for (p in thesource) {
  if (thesource.hasOwnProperty(p)) {
    theclone.p = thesource.p;
  }
}
于 2010-11-04T08:48:19.907 に答える