js删除节点

[code="java"]


function getColumn(){ var d=new Array(); d= document.getElementById("column").childNodes; for(var i=0 ;i < d.length; i++){ document.getElementById("column").removeChild(d.item(i)); } var name=document.getElementById("tableName").value; var column=document.getElementById("column"); }





ddd
eee
aaa



[/code]

为什么点按钮没有一次性删除

7个回答

[code="java"]

function getColumn(){ document.getElementById("column").options.length=0; }









ddd

eee

aaa





[/code]

本地已测!

删节点用倒序删除.

比如说现有一个树有3个节点.
节点下标分别为0, 1, 2.

你用正序的话, 就是从0循环到2, 执行三次

第一次执行, 会删除下标为0的节点.
这个时候树剩下二个节点, 这二个节点自动向前补进一位.
从1, 2变成0, 1.

第二次执行的时候, 会删除下标为1的节点.
这个时候树剩下下标为0的节点.

第三次执行的时候, 会删除下标为2的节点.
但树里面没有下标为2的节点, 没完成删除操作.

循环结束, 树里面还剩下下标为0这个节点.

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的那个,也就是删除一直第一个就可以了,不然删不完

这样就删除了。
[code="html"]

function getColumn(){ var d= document.getElementById("column"); var len=d.length; for(var i=len-1 ;i >=0; i--){ document.getElementById("column").removeChild(d.options[i]); } var column=document.getElementById("column"); }





ddd
eee
aaa



[/code]

[code="java"]for(var i=0 ;i < d.length; i++)[/code]
这一句,你取得是d.length,当你删除一项的时候,这个数值减一,所以不可能完全删除。
在此基础上的修改为:
[code="java"]for(var i=0 ;i < d.length;) [/code]
就能完全删除

option数组本身提供了删除方法
remove()传递一个参数,就是option的下标,从0开始

之所以用一个变量var len;是因为option数组在删除的时候数量变了,把数组长度赋值给这个变量就不会出现变化
而你要删除所有,那么所做的循环次数应该跟数组长度一样,所以先确定要循环多少次,循环体直接循环删除option数组的第一个元素

立即提问