leijuanjuan
2010-08-13 16:21
浏览 231

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条回答 默认 最新

  • oyj7454103 2010-08-13 16:35
    已采纳

    [code="java"]

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









    ddd

    eee

    aaa





    [/code]

    本地已测!

    打赏 评论
  • eplang 2010-08-13 16:35

    删节点用倒序删除.

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

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

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

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

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

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

    打赏 评论
  • 「已注销」 2010-08-13 16:36

    这样就删除了。
    [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]
    打赏 评论
  • hermit1216 2010-08-13 16:46

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

    打赏 评论
  • iteye_2443 2010-08-13 16:47

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

    打赏 评论
  • iteye_2443 2010-08-13 16:49

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

    打赏 评论
  • iteye_2443 2010-08-13 16:52

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

    打赏 评论

相关推荐 更多相似问题