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高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
Feb 27 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
Jan 16 Javascript
JavaScript Serializer序列化时间处理示例
Jul 31 Javascript
JavaScript中split() 使用方法汇总
Apr 17 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
Apr 26 Javascript
Bootstrap框架实现广告轮播效果
Nov 28 Javascript
Vue 父子组件、组件间通信
Mar 08 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
May 22 Javascript
jQuery封装animate.css的实例
Jan 04 jQuery
jquery判断滚动条距离顶部的距离方法
Sep 05 jQuery
详解jQuery中的getAll()和cleanData()
Apr 15 jQuery
微信小程序实现卡片左右滑动效果的示例代码
May 01 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遍历数组的几种方法
2012/03/22 PHP
php跨服务器访问方法小结
2015/05/12 PHP
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
正则表达式替换html元素属性的方法
2016/11/26 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
Input文本框随着输入内容多少自动延伸的实现
2017/02/15 Javascript
Node之简单的前后端交互(实例讲解)
2017/11/14 Javascript
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
JS中Map和ForEach的区别
2018/02/05 Javascript
vue后台管理之动态加载路由的方法
2018/08/13 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
Python计算程序运行时间的方法
2014/12/13 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
Python import自定义模块方法
2015/02/12 Python
Windows下安装python2.7及科学计算套装
2015/03/05 Python
Python OpenCV实现图片上输出中文
2018/01/22 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
奥地利网上书店:Weltbild
2017/07/14 全球购物
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
公司员工的自我评价范例
2013/11/01 职场文书
服装促销活动方案
2014/02/23 职场文书
2014组织生活会方案
2014/05/19 职场文书
2014年公务员工作总结
2014/11/18 职场文书
软件项目经理岗位职责
2015/04/01 职场文书
海底两万里读书笔记
2015/06/26 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书