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上面。

posted @ 2014-09-10 20:10  Qi~  阅读(1452)  评论(0编辑  收藏  举报