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显示随机图像或引用
Apr 21 Javascript
两种简单实现菜单高亮显示的JS类代码
Jun 27 Javascript
Jquery easyui 下loaing效果示例代码
Aug 12 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
Nov 26 Javascript
jquery trigger实现联动的方法
Feb 29 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
Aug 01 Javascript
node.js版本管理工具n无效的原理和解决方法
Nov 24 Javascript
手机软键盘弹出时影响布局的解决方法
Dec 15 Javascript
js时间戳与日期格式之间相互转换
Dec 11 Javascript
Vue中 key keep-alive的实现原理
Sep 18 Javascript
vue-router重定向和路由别名的使用讲解
Jan 19 Javascript
JS 4个超级实用的小技巧 提升开发效率
Oct 05 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
重置版游戏视频
2020/04/09 魔兽争霸
PHP 将图片按创建时间进行分类存储的实现代码
2010/01/05 PHP
PHP插入排序实现代码
2013/04/04 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
PHP下载远程图片的几种方法总结
2017/04/07 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
JavaScript中的对象化编程
2008/01/16 Javascript
Extjs学习笔记之六 面版
2010/01/08 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
JavaScript 五大常见函数
2018/03/23 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
python 简单的绘图工具turtle使用详解
2017/06/21 Python
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
wxPython色环电阻计算器
2019/11/18 Python
pandas的相关系数与协方差实例
2019/12/27 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
解决pycharm中的run和debug失效无法点击运行
2020/06/09 Python
Python Pandas list列表数据列拆分成多行的方法实现
2020/12/14 Python
python中添加模块导入路径的方法
2021/02/03 Python
商场端午节活动方案
2014/01/29 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
2014年保安个人工作总结
2014/11/13 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
煤矿安全生产工作总结
2015/08/13 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书