[code="java"]
为什么点按钮没有一次性删除
[code="java"]
本地已测!
删节点用倒序删除.
比如说现有一个树有3个节点.
节点下标分别为0, 1, 2.
你用正序的话, 就是从0循环到2, 执行三次
第一次执行, 会删除下标为0的节点.
这个时候树剩下二个节点, 这二个节点自动向前补进一位.
从1, 2变成0, 1.
第二次执行的时候, 会删除下标为1的节点.
这个时候树剩下下标为0的节点.
第三次执行的时候, 会删除下标为2的节点.
但树里面没有下标为2的节点, 没完成删除操作.
循环结束, 树里面还剩下下标为0这个节点.
这样就删除了。
[code="html"]
[code="java"]for(var i=0 ;i < d.length; i++)[/code]
这一句,你取得是d.length,当你删除一项的时候,这个数值减一,所以不可能完全删除。
在此基础上的修改为:
[code="java"]for(var i=0 ;i < d.length;) [/code]
就能完全删除
function getColumn(){
var d = document.getElementById("column").options;
var len = d.length;
for(var i=0 ;i < len; i++){
alert(d[0].text);
d.remove(0);
}
}
这样就可以了
首先,拿到所有option,是一个数组,不用先new Array(),这是多余的,浪费内存,虽然不多,但没必要。
其次,删除的时候option数组是在变化的,所以一直删除下标为0的那个,也就是删除一直第一个就可以了,不然删不完
option数组本身提供了删除方法
remove()传递一个参数,就是option的下标,从0开始
之所以用一个变量var len;是因为option数组在删除的时候数量变了,把数组长度赋值给这个变量就不会出现变化
而你要删除所有,那么所做的循环次数应该跟数组长度一样,所以先确定要循环多少次,循环体直接循环删除option数组的第一个元素