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 相关文章推荐
js的event详解。
Sep 06 Javascript
javascript cookie解码函数(兼容ff)
Mar 17 Javascript
jquery 学习笔记 传智博客佟老师附详细注释
Sep 12 Javascript
jquery 根据name名获取元素的value值
Feb 27 Javascript
Node.js重新刷新session过期时间的方法
Feb 04 Javascript
关于axios返回空对象的问题解决
Apr 04 Javascript
Node.js npm命令运行node.js脚本的方法
Oct 10 Javascript
vue+Vue Router多级侧导航切换路由(页面)的实现代码
Dec 20 Javascript
浅谈Vue.js组件(二)
Apr 09 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
Jan 11 jQuery
Vue.js实现立体计算器
Feb 22 Javascript
JavaScript实现点击出现子菜单效果
Feb 08 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正则走开
2008/03/15 PHP
php checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
php使用qr生成二维码的示例分享
2014/01/20 PHP
php7 错误处理机制修改实例分析
2020/05/25 PHP
jquery插件之easing使用
2010/08/19 Javascript
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
Javascript限制网页只能在微信内置浏览器中访问
2014/11/09 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
关于vue.extend和vue.component的区别浅析
2017/08/16 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
echarts整合多个类似option的方法实例
2018/07/10 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
vue Cli 环境删除与重装教程 - 版本文档
2020/09/11 Javascript
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
python保存网页图片到本地的方法
2018/07/24 Python
Python实现的特征提取操作示例
2018/12/03 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
高三自我鉴定
2013/10/23 职场文书
经济与贸易专业应届生求职信
2013/11/19 职场文书
便利店投资创业计划书
2014/02/08 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
社区好人好事材料
2014/12/26 职场文书
音乐教师个人总结
2015/02/06 职场文书
大国崛起观后感
2015/06/02 职场文书
2015年秋季小学开学标语
2015/07/16 职场文书
体育教师研修感悟
2015/11/18 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle