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 相关文章推荐
模仿JQuery.extend函数扩展自己对象的js代码
Dec 09 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
Oct 24 Javascript
Egret引擎开发指南之运行项目
Sep 03 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
Nov 29 Javascript
JavaScript学习笔记之ES6数组方法
Mar 25 Javascript
基于JavaScript FileReader上传图片显示本地链接
May 27 Javascript
浅谈javascript中执行环境(作用域)与作用域链
Dec 08 Javascript
vue.js+Element实现表格里的增删改查
Jan 18 Javascript
浅谈一种让小程序支持JSX语法的新思路
Jun 16 Javascript
利用Angular7开发一个Radio组件的全过程
Jul 11 Javascript
node.js 如何监视文件变化
Sep 01 Javascript
多个Vue项目部署到服务器的步骤记录
Oct 22 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下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
Snoopy类使用小例子
2008/04/15 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
2013/06/18 PHP
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
php使用Jpgraph创建折线图效果示例
2017/02/15 PHP
深入认识javascript中的eval函数
2009/11/02 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
jquery验证手机号码、邮箱格式是否正确示例代码
2013/07/28 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
jQuery中设置form表单中action值的实现方法
2016/05/25 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
2017/09/19 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
python处理xml文件的方法小结
2017/05/02 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
如何使用python代码操作git代码
2020/02/29 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
django实现模型字段动态choice的操作
2020/04/01 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
护士毕业实习感言
2014/03/05 职场文书
会议欢迎词范文
2015/01/27 职场文书
教师党员自我评价2015
2015/03/04 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
微信小程序和php的登录实现
2021/04/01 PHP
python实现A*寻路算法
2021/06/13 Python