javascript 使用 NodeList需要注意的问题
更新时间:2013年03月04日 15:20:28 作者:
理解NodeList及其近亲NamedNodeMap和HTMLCollection,是从整体上透彻理解DOM的关键所在,这三个集合都是“动态的”,换句话说,每当文档结构发生变化时,他们都会得到更新。
因此,他们始终存着最新,最准确的信息。从本质上说,所有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将NodeList作为Array数组处理的方法
- javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
- js中将HTMLCollection/NodeList/伪数组转换成数组的代码
- javascript先序遍历DOM树的方法
- JavaScript简单遍历DOM对象所有属性的实现方法
- javascript 获取HTML DOM父、子、临近节点
- JavaScript 节点操作 以及DOMDocument属性和方法
- javascript获取dom的下一个节点方法
- Js 获取HTML DOM节点元素的方法小结
- JavaScript DOM节点操作方法总结
- 原生JS实现循环Nodelist Dom列表的4种方式示例
相关文章
onsubmit阻止form表单提交与onclick的相关操作
return false会阻止表单提交,基本上关于onsubmit=return false有以下几点要注意的地方,学习后台编程的朋友一定要知道。2010-09-09JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
这篇文章主要介绍了JavaScript函数式编程(Functional Programming)组合函数(Composition)用法,结合实例形式分析了javascript函数式编程中组合函数的概念、原理、用法及操作注意事项,需要的朋友可以参考下2019-05-05
最新评论