今天开发中遇到的一个比较诡异的问题,让我初窥了DOM的NodeList 不知道我的理解对不对 先说需求: 一个ul里面有若干个li,数目不定,我需要删除除去最后一个的 前面所有的 li; 这样的需求 第一直觉 在ul里面循环 逐个删除 代码如下:
var li = ul.getElementsByTagName('li');var len = li.length;for(var i=0 ; i< len-1; i++){ ul.removeChild(li[i])}
但实际上这样是不行的,行不通~~
原因:当删除掉第一个子元素后,第二个子元素的顺序就动态的变成了0,因为第一个没有了 所以第二个成了第一个 依次类推 这样的话 所谓的删除第二个元素就变成删除第三个元素了
将代码为如下,其实改动很小:
for(var i=0; i
这个思路是 每次都删除第一个元素 这样就可以了
原因是什么呢 我百度了下 不知道得到的答案是不是正确的
NodeList是DOM中一个可以从0开始的标签索引,这种对象一般是可以同时返回多个单节点的DOM方法返回过来的。(如上文的getElementsByTagName('li')),NodeList
是一个动态的对象,对文档树的任何操作将直接反映到这个对象上。比如文档子节点的增删改移动都会使NodeList对象的索引和内容发生变化。
目前得到的答案是这样,先记一下~~