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解决数字不能换行问题
Aug 10 Javascript
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
Feb 03 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
Nov 15 Javascript
JS实现仿QQ效果的三级竖向菜单
Sep 25 Javascript
Jquery uploadify上传插件使用详解
Jan 13 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
Dec 28 Javascript
Vue.js系列之项目结构说明(2)
Jan 03 Javascript
Vue-Router基础学习笔记(小结)
Oct 15 Javascript
微信小程序自定义导航栏
Dec 31 Javascript
vue.js的状态管理vuex中store的使用详解
Nov 08 Javascript
使用js原生实现年份轮播选择效果实例
Jan 12 Javascript
7个你应该知道的JS原生错误类型
Apr 29 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实现的MySQL数据浏览器
2007/03/11 PHP
超级简单的php+mysql留言本源码
2009/11/11 PHP
php 常用类汇总 推荐收藏
2010/05/13 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
2014/11/02 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
JS判断iframe是否加载完成的方法
2016/08/03 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
2017/06/06 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
2017/07/04 Javascript
vue中配置mint-ui报css错误问题的解决方法
2017/10/11 Javascript
js实现表格单列按字母排序
2020/08/12 Javascript
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
Python selenium实现微博自动登录的示例代码
2018/05/16 Python
python如何实时获取tcpdump输出
2020/09/16 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
Electric官网:美国高级眼镜和配件品牌
2020/06/04 全球购物
巧克力蛋糕店创业计划书
2014/01/14 职场文书
高中班级口号
2014/06/09 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
React四级菜单的实现
2022/04/08 Javascript