关于innerHTML破坏DOM结构的问题

将dom对象存入数组后,如果使用innerHTML编辑该对象的父级节点。即使用+=追加内容,对象也将被更新,导致数组中对原dom对象的引用失效:        
  1. <!-- 测试步骤: addchild1 -> inner -> show -> 显示arr[0]是否还是child1对象 -->
  2. <div id="parent1">
  3. <div id="child1">child1</div>
  4. </div>

  5. <button οnclick="addchild1()">addchild1</button>
  6. <button οnclick="inner()">inner</button>
  7. <button οnclick="show()">show</button>

  8. <SCRIPT LANGUAGE="JavaScript">
  9. var arr = [];
  10. function addchild1(){
  11.     arr[0] = document.getElementById("child1")
  12. }

  13. function show(){
  14.     alert(arr[0] == document.getElementById("child1"))
  15. }

  16. function inner(){ 
  17.     //使用innerHTML会破坏dom结构,导致arr[0]失去对document.getElementById("child1")的引用
  18.     //arr[0]只剩下节点片段:<div id="child1"></div>
  19.     //所以即使能获取tagName,id等信息,但已经不是child1对象了
  20.     //document.getElementById("parent1").innerHTML += "<div id='child2'>child2</div>";

  21.     //使用正规的DOM方式增加节点能避免此问题
  22.     var _a = document.createElement("div")
  23.     _a.id="child2";
  24.     _a.innerHTML = "child2"
  25.     document.getElementById("parent1").appendChild(_a)
  26.   
  27. }
  28. </SCRIPT>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值