f8g

IEのcloneNodeでFuck

IEでcloneNodeしたエレメントは、雛形のオレオレプロパティまで残ってます。そこで、ObjectのクローンFuck。

var test = document.createElement("div");
test.oredayo = 0;
var test2 = test.cloneNode(false);
alert(test.oredayo); // 0
alert(test2.oredayo); // 0
test.oredayo = 1;
alert(test.oredayo); // 1
alert(test2.oredayo); // 0

お互い干渉しません。これからはこう書きましょう。

var obj1 = document.createElement("div");
obj1.oredayo = 1;
var obj1Clone = cloneObject(obj1);
obj1Clone.oredayo = 2;
alert(obj1.oredayo); // 1
alert(obj1Clone.oredayo); // 2

function cloneObject(obj){
    return obj.cloneNode(false);
}

しかし問題点があります。

var obj2 = document.createElement("div");
obj2.oredayo = {oreore:1};
var obj2Clone = cloneObject(obj2);
obj2Clone.oredayo.oreore = 2;
alert(obj2.oredayo.oreore); // 2
alert(obj2Clone.oredayo.oreore); // 2

なんか普通に obj2Clone.oredayo.oreore が obj2.oredayo.oreore です。こう書けば大丈夫です。

var obj3 = document.createElement("div");
obj3.oredayo = {oreore:1};
var obj3Clone = cloneObject(obj3);
obj3Clone.oredayo = {oreore:2};
alert(obj3.oredayo.oreore); // 1
alert(obj3Clone.oredayo.oreore); // 2

新たに{oreore:2}を作ればよいのです。もしくは、Objectなんてものは捨ててcloneNodeを使いまくればよいのです。
全然よくありません。