将dom对象存入数组后,如果使用innerHTML编辑该对象的父级节点。即使用+=追加内容,对象也将被更新,导致数组中对原dom对象的引用失效:
- <!-- 测试步骤: addchild1 -> inner -> show -> 显示arr[0]是否还是child1对象 -->
- <div id="parent1">
- <div id="child1">child1</div>
- </div>
- <button οnclick="addchild1()">addchild1</button>
- <button οnclick="inner()">inner</button>
- <button οnclick="show()">show</button>
- <SCRIPT LANGUAGE="JavaScript">
- var arr = [];
- function addchild1(){
- arr[0] = document.getElementById("child1")
- }
- function show(){
- alert(arr[0] == document.getElementById("child1"))
- }
- function inner(){
- //使用innerHTML会破坏dom结构,导致arr[0]失去对document.getElementById("child1")的引用
- //arr[0]只剩下节点片段:<div id="child1"></div>
- //所以即使能获取tagName,id等信息,但已经不是child1对象了
- //document.getElementById("parent1").innerHTML += "<div id='child2'>child2</div>";
- //使用正规的DOM方式增加节点能避免此问题
- var _a = document.createElement("div")
- _a.id="child2";
- _a.innerHTML = "child2"
- document.getElementById("parent1").appendChild(_a)
- }
- </SCRIPT>