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 相关文章推荐
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
Sep 20 Javascript
jQuery圆形统计图开发实例
Jan 04 Javascript
jQuery实现自动切换播放的经典滑动门效果
Sep 12 Javascript
js命名空间写法示例
Dec 18 Javascript
JavaScript事件学习小结(一)事件流
Jun 09 Javascript
浅谈javascript中的加减时间
Jul 12 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
Dec 07 Javascript
微信小程序日期时间选择器使用方法
Feb 01 Javascript
详解webpack编译速度提升之DllPlugin
Feb 05 Javascript
详解elementui之el-image-viewer(图片查看器)
Aug 30 Javascript
记一次react前端项目打包优化的方法
Mar 30 Javascript
vue 监听 Treeselect 选择项的改变操作
Aug 31 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
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
js setTimeout()函数介绍及应用以倒计时为例
2013/12/12 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
详解JavaScript树结构
2017/01/09 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
[03:59]5分钟带你了解什么是DOTA2(第二期)
2017/02/07 DOTA
win7安装python生成随机数代码分享
2013/12/27 Python
python清除字符串里非字母字符的方法
2015/07/02 Python
简介Django框架中可使用的各类缓存
2015/07/23 Python
关于python的list相关知识(推荐)
2017/08/30 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
python多线程下信号处理程序示例
2019/05/31 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
Python3 解决读取中文文件txt编码的问题
2019/12/20 Python
浅谈Keras中shuffle和validation_split的顺序
2020/06/19 Python
Python 存取npy格式数据实例
2020/07/01 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
socket.io 和canvas 实现的共享画板功能
2019/05/22 HTML / CSS
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
高中生期末评语
2014/01/28 职场文书
五年级音乐教学反思
2014/02/06 职场文书
golang如何去除多余空白字符(含制表符)
2021/04/25 Golang
高性能跳频抗干扰宽带自组网电台
2022/02/18 无线电