JS小计,NodeList的操作注意事项

不直接操作NodeList,将其转换成静态数组后再使用 

  方法: Array.prototype.slice.call() => 标准浏览器

      逐个拷贝到一个新数组中 => For IE

    需要注意的是,遍历NodeList时,不做对当前NodeList相关结构有影响的DOM操作,并且如之前所提到的,要缓存一些频繁使用到的属性值,以免发生不必要的悲剧。

 1 <span style="font-size: 16px; font-family: 宋体;">    
 2     var divs = document.getElementsByTagName('DIV');
 3     //假定页面中有div,所以divs.length是大于0的
 4     for (var idx = 0; idx < divs.length; idx++){
 5         document.body.appendChild(
 6             //杯具悄然而置
 7             document.createElement('DIV')
 8         );
 9         console.info(divs.length);
10     }
11 </span>

上面的代码最后运行会报错,原因通过不断地往document.body下插入div 节点,for循环的终止条件( div.length也随之改变)失效,陷入死循环。也就是说通过getElementsByTagName()获取得到的是一个Live NodeList的引用,任何对其相关的DOM操作都会立即反应在这个NodeList上面。

转载于:https://www.cnblogs.com/xiaoqi-/p/3965076.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值