Technology
 

ผู้ใช้:Ans/cloneNode

จาก Lug

<script language="JavaScript" type="text/javascript">
var var_onclick = new Function("f(this);");
function f_onclick() { f(this); }
   var a=document.createElement("button");
   a.onclick=new Function("return 000;");
   //a.innerHTML="<span onclick='return 111;' />";
   //a.innerHTML="<button onclick='return 111;' />"; // not work
   //a.innerHTML="<button onclick='return 111;'>x</button>"; // not work in ie
   //a.innerHTML="<span onclick='return 111;' attr1>x</span>";
   a.innerHTML="<div onclick='return 111;' attr1>x</div>";
   //a.innerHTML="<a onclick='return 111;' attr1>x</a>"; // not work in ie
   //a.firstChild.onclick=new Function("return 222");
   // clone: null in ie, but not ffox
   //a.firstChild.onclick=a.firstChild.onclick;
function f(node) {
   var debug = document.getElementById("debug");
 
   debug.value += "a.addEventListener:"+a.addEventListener+"\n";
   // ffox span/div/a child: ... 111 ...; ie span/div child: ... 111 ...
   // ffox button child: undefined
   debug.value += "a:"+a.firstChild.onclick+"\n";
   debug.value += "a:"+a.cloneNode(true).firstChild.onclick+"\n";
   debug.value += "a:"+a.firstChild.cloneNode(true).onclick+"\n";
   a.firstChild.onclick=a.firstChild.onclick;
   // ffox span/div/a child: ... 111 ...; ie span/div child: ... 111 ...
   // ffox button child: undefined
   debug.value += "a:"+a.firstChild.onclick+"\n";
   // ffox span/div/a child: ... 111 ...; ie span/div child: null
   // ffox button child: undefined
   debug.value += "a:"+a.cloneNode(true).firstChild.onclick+"\n";
   debug.value += "a:"+a.firstChild.cloneNode(true).onclick+"\n";
   a.firstChild.onclick=new Function("return 222");
   // ffox: ... 222 ...; ie: 222
   debug.value += "a:"+a.firstChild.onclick+"\n";
   // ffox span/div/a child: ... 111 ...; ie: null
   // ffox button child: undefined
   debug.value += "a:"+a.cloneNode(true).firstChild.onclick+"\n";
   debug.value += "a:"+a.firstChild.cloneNode(true).onclick+"\n";
 
   var test = document.getElementById("test");
   debug.value += "t.addEventListener:"+test.addEventListener+"\n";
   debug.value += "t.attachEvent:"+test.attachEvent+"\n";
   debug.value += "t.cloneNode:"+test.cloneNode+"\n";
 
   // ffox: ... 333 ...; ie: ... 333 ...
   debug.value += "t:"+test.onclick+"\n";
   debug.value += "t:"+test.cloneNode(true).onclick+"\n";
   test.onclick = test.onclick;
   // ffox: ... 333 ...; ie: ... 333 ...
   debug.value += "t:"+test.onclick+"\n";
   // ffox: ... 333 ...; ie: null
   debug.value += "t:"+test.cloneNode(true).onclick+"\n";
   test.onclick = function () { return 444; };
   // ffox: ... 444 ...; ie: ... 444 ...
   debug.value += "t:"+test.onclick+"\n";
   // ffox: ... 333 ...; ie: null
   debug.value += "t:"+test.cloneNode(true).onclick+"\n";
 
   // ffox: undefined; ie: undefined
   debug.value += "t.onClick:"+test.onClick+"\n";
   debug.value += "t.onClick:"+test.cloneNode(true).onClick+"\n";
   test.onClick = test.onClick;
   // ffox: undefined; ie: undefined
   debug.value += "t.onClick:"+test.onClick+"\n";
   debug.value += "t.onClick:"+test.cloneNode(true).onClick+"\n";
   test.onClick = function () { return 444; };
   // ffox: ... 444 ...; ie: ... 444 ...
   debug.value += "t.onClick:"+test.onClick+"\n";
   // ffox: undefined; ie: ... 444 ...
   debug.value += "t.onClick:"+test.cloneNode(true).onClick+"\n";
 
   // ffox: undefined; ie: undefined
   debug.value += "t.xxx:"+test.xxx+"\n";
   debug.value += "t.xxx:"+test.cloneNode(true).xxx+"\n";
   test.xxx = test.xxx;
   // ffox: undefined; ie: undefined
   debug.value += "t.xxx:"+test.xxx+"\n";
   debug.value += "t.xxx:"+test.cloneNode(true).xxx+"\n";
   test.xxx = function () { return 444; };
   // ffox: ... 444 ...; ie: ... 444 ...
   debug.value += "t.xxx:"+test.xxx+"\n";
   // ffox: undefined; ie: ... 444 ...
   debug.value += "t.xxx:"+test.cloneNode(true).xxx+"\n";
 
   // ffox, ie: 333
   debug.value += "t.title:"+test.title+"\n";
   debug.value += "t.title:"+test.cloneNode(true).title+"\n";
   test.title = test.title;
   // ffox, ie: 333
   debug.value += "t.title:"+test.title+"\n";
   debug.value += "t.title:"+test.cloneNode(true).title+"\n";
   test.title = 444;
   // ffox, ie: 444
   debug.value += "t.title:"+test.title+"\n";
   debug.value += "t.title:"+test.cloneNode(true).title+"\n";
 
   // ffox, ie: native
   debug.value += "t.appendChild:"+test.appendChild+"\n";
   debug.value += "t.appendChild:"+test.cloneNode(true).appendChild+"\n";
   test.appendChild = test.appendChild;
   // ffox, ie: native
   debug.value += "t.appendChild:"+test.appendChild+"\n";
   debug.value += "t.appendChild:"+test.cloneNode(true).appendChild+"\n";
   test.appendChild = 444;
   // ffox, ie: 444
   debug.value += "t.appendChild:"+test.appendChild+"\n";
   // ffox: native; ie: 444
   debug.value += "t.appendChild:"+test.cloneNode(true).appendChild+"\n";
 
   test = document.getElementById(name="test2");
   // ffox: undefined; ie: null
   debug.value += name+":"+test.onclick+"\n";
   debug.value += name+":"+test.cloneNode(true).onclick+"\n";
   test.onclick = test.onclick;
   // ffox: undefined; ie: null
   debug.value += name+":"+test.onclick+"\n";
   debug.value += name+":"+test.cloneNode(true).onclick+"\n";
   test.onclick = function () { return 444; };
   // ffox: ... 444 ...; ie: ... 444 ...
   debug.value += name+":"+test.onclick+"\n";
   // ffox: undefined; ie: null
   debug.value += name+":"+test.cloneNode(true).onclick+"\n";
 
   test = document.getElementById(name="test3");
   // ffox: undefined; ie: null
   debug.value += name+":"+test.onclick+"\n";
   debug.value += name+":"+test.cloneNode(true).onclick+"\n";
   test.onclick = test.onclick;
   // ffox: undefined; ie: null
   debug.value += name+":"+test.onclick+"\n";
   debug.value += name+":"+test.cloneNode(true).onclick+"\n";
   test.onclick = function () { return 444; };
   // ffox: ... 444 ...; ie: ... 444 ...
   debug.value += name+":"+test.onclick+"\n";
   // ffox: undefined; ie: null
   debug.value += name+":"+test.cloneNode(true).onclick+"\n";
}
</script>
<span onclick='f(this);' >span</span>
<button onclick='f(this);' >a</button>
<span onclick='var_onclick();' >span</span>
<button onclick='var_onclick();' >a</button>
<span onclick='f_onclick();' >span</span>
<button onclick='f_onclick();' >a</button>
<button onclick='return 333;' title=333 id=test >a</button>
<button id=test2 >a</button>
<div id=test3 >a</div>
<textarea id=debug rows=12 cols=100 >
</textarea>