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 客户端验证上传图片的大小(兼容IE和火狐)
Aug 15 Javascript
基于jquery的一个简单的脚本验证插件
Apr 05 Javascript
早该知道的7个JavaScript技巧
Mar 27 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
Sep 03 Javascript
JavaScript中获取高度和宽度函数总结
Oct 08 Javascript
jquery判断单选按钮radio是否选中的方法
May 05 Javascript
基于Node.js + WebSocket打造即时聊天程序嗨聊
Nov 29 Javascript
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
Mar 27 Javascript
vue中路由验证和相应拦截的使用详解
Dec 13 Javascript
关于angular浏览器兼容性问题的解决方案
Jul 26 Javascript
js实现右键弹出自定义菜单
Sep 08 Javascript
Vue如何实现验证码输入交互
Dec 07 Vue.js
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 Smarty date_format [格式化时间日期]
2010/03/15 PHP
php带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
php实现的SESSION类
2014/12/02 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
jquery实现div拖拽宽度示例代码
2013/07/31 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
2015/03/20 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
基于Node.js实现nodemailer邮件发送
2016/01/26 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
2016/12/21 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
基于vue实现一个神奇的动态按钮效果
2019/05/15 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
BootstrapValidator实现表单验证功能
2019/11/08 Javascript
python实现批量下载新浪博客的方法
2015/06/15 Python
python中enumerate函数遍历元素用法分析
2016/03/11 Python
Python 基础教程之包和类的用法
2017/02/23 Python
python烟花效果的代码实例
2020/02/25 Python
Python turtle库的画笔控制说明
2020/06/28 Python
python/golang实现循环链表的示例代码
2020/09/14 Python
python中的yield from语法快速学习
2020/11/06 Python
大学生毕业自我评价范文分享
2013/11/11 职场文书
幼儿教师思想汇报
2014/01/10 职场文书
2014迎国庆演讲稿
2014/09/19 职场文书
2015年新农合工作总结
2015/03/30 职场文书
2015年项目经理工作总结
2015/04/30 职场文书
医院志愿者活动总结
2015/05/06 职场文书
检察院起诉书
2015/05/20 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
python flappy bird小游戏分步实现流程
2022/02/15 Python