javascript 使用 NodeList需要注意的问题


Posted in Javascript onMarch 04, 2013

因此,他们始终存着最新,最准确的信息。从本质上说,所有NodeList对象都是访问DOM文档时实时运行的查询。例如下列代码会导致无限的循环:

<script type="text/javascript"> 
     window.onload=function(){
     var divObj=document.getElementsByTagName('div');
     for(var i=0;i<divObj.length;i++){
     var d=document.createElement("div");
     document.body.appendChild(d);
     }
     }
</script>

   首先取得页面中的所有div,由于这个集合(divObj)是“动态的”,因此只要有新的div插入到页面中,divObj都会添加这个新添加的div。也就是说,只要访问divObj,都会重新查询一次,重新更新一下divObj。所以,上面的代码,会出现死循环,因为每次循环的时候都插入了一个新的div,而每次循环都要对条件i<divObj.length求值,意味着会运行取得的所有<div>的查询。

  如果想要迭代一个NodeList,最好是使用length属性初始化第二个变量,然后将迭代器与该变量比较。如下代码所示:

<script type="text/javascript"> 
     window.onload=function(){
     var divObj=document.getElementsByTagName('div');
     for(var i=0,len=divObj.length;i<len;i++){
     var d=document.createElement("div");
     document.body.appendChild(d);
     }
     }
</script>

这个例子中初始化了第二个变量(len)。由于len中保存着对divObj.length的在循环开始时的一个快照,因此就会避免上个例子的死循环。

总结:一般来说,应该尽量减少访问NodeList的次数。因为每次访问NodeList,都会运行一基于文档的查询。所以,可以考虑将从NodeList中取到的值缓存起来,如例子二所示!

Javascript 相关文章推荐
网页开发中的容易忽略的问题 javascript HTML中的table
Apr 15 Javascript
jquery 模拟雅虎首页的点击对话框效果
Apr 11 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
Jun 05 Javascript
JS判断iframe是否加载完成的方法
Aug 03 Javascript
jQuery插件echarts去掉垂直网格线用法示例
Mar 03 Javascript
layer弹窗插件操作方法详解
May 19 Javascript
一个基于react的图片裁剪组件示例
Apr 18 Javascript
React 项目迁移 Webpack Babel7的实现
Sep 12 Javascript
微信小程序实现文字无限轮播效果
Dec 28 Javascript
jQuery AJAX与jQuery事件的分析讲解
Feb 18 jQuery
vue中更改数组中属性,在页面中不生效的解决方法
Oct 30 Javascript
js实现筛选功能
Nov 24 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
Mar 04 #Javascript
在图片上显示左右箭头类似翻页的代码
Mar 04 #Javascript
iframe异步加载实现点击左边菜单加载右边内容实例讲解
Mar 04 #Javascript
jQuery+CSS 半开折叠效果原理及代码(自写)
Mar 04 #Javascript
JavaScript实现自己的DOM选择器原理及代码
Mar 04 #Javascript
jQuery:节点(插入,复制,替换,删除)操作
Mar 04 #Javascript
JS获取后台Cookies值的小例子
Mar 04 #Javascript
You might like
PHP的开合式多级菜单程序
2006/10/09 PHP
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
2010/03/23 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
2011/11/02 PHP
Zend的MVC机制使用分析(二)
2013/05/02 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
由ReactJS的Hello world说开来
2015/07/02 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
2016/05/16 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
js和jquery中获取非行间样式
2017/05/05 jQuery
浅谈React的最大亮点之虚拟DOM
2018/05/29 Javascript
重新认识vue之事件阻止冒泡的实现
2018/08/02 Javascript
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
Python书单 不将就
2017/07/11 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
Python实现八皇后问题示例代码
2018/12/09 Python
python  logging日志打印过程解析
2019/10/22 Python
详解Python实现进度条的4种方式
2020/01/15 Python
拿来就用!Python批量合并PDF的示例代码
2020/08/10 Python
python中remove函数的踩坑记录
2021/01/04 Python
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
Zipadee-Zip襁褓过渡毯:Sleeping Baby
2018/12/30 全球购物
Lentiamo比利时:便宜的隐形眼镜
2020/02/14 全球购物
Python面试题:Python是如何进行内存管理的
2014/08/04 面试题
师范教师毕业鉴定
2014/01/13 职场文书
家长学校工作方案
2014/05/07 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书