问答详情
源自:9-14 删除节点removeChild()

关于删除一行的实现,我这个点击一下删除一行在删除最后一行时不知道问什么要点击2次,不知道哪位大神能解答一下?

<!DOCTYPE HTML>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>无标题文档</title>

</head>


<body>

<div id="content">

  <h1>html</h1>

  <h1>php</h1>

  <h1>javascript</h1>

  <h1>jquery</h1>

  <h1>java</h1>

</div>


<script type="text/javascript">



function clearText()

{

var mynode=document.getElementById("content");

for(var i=mynode.childNodes.length-1;i>=0;i--)

{

var x=mynode.removeChild(mynode.childNodes[i]);

}

}

    

function clearone(){

var mynode=document.getElementById("content");

//此处用到的是继续循环:continue

for(i=0;i<mynode.childNodes.length;i++)

{

if(mynode.childNodes[i].nodeType!=1)

{

continue;

}

var x=mynode.removeChild(mynode.childNodes[mynode.childNodes.length-1]);

}

}

</script>



<button onclick="clearText()">清除节点内容</button>

<input type="button" value="删除一行" onclick="clearone()" />



</body>

</html>


提问者:qq_枫_ 2016-12-01 17:38

个回答

  • KevinLeong4184113
    2016-12-01 22:27:11
    已采纳

    (第一份length错了,当时做着做着后面忘记理思路了,这份正确)你这个语法完全是错的!首先,你删除一行,为什么要用for循环?for循环是用来遍历的!这里包括空格(空行)一共有11个节点,先把节点列举出来:(不用看,需要时再来查找)

    a[0]:空格;    a[1]:html;    a[2]:空格;    a[3]:php;    a[4]:空格;    a[5]:javascript;    a[6]:空格;    a[7]:jquery;    a[8]:空格;    a[9]:java;     a[10]:空格; 

    下面你可以当成一个表格来看(第一次点击“删除一行”,所发生的步骤)

    i    length    删除的节点(删除为a[length-1])   //i为偶数时,a[i].type!=1;i为奇数时,a[i].type==1;

    0    11         不删除                      //i为偶数,continue,不删除,length依然为11;

    1    11        删除a[10]:空格         //i为奇数,删除后,length为10(此处依然为11,下面为删除后变成10)

    2    10          不删除

    3    10          删除a[9]:java

    4    9          不删除

    5    9         删除a[8]:空格

    6    8         不删除

    7    8         删除a[7]:jquery

    8    7        i<length不成立,因此不执行


    以上就是你第一次点击所执行的所有步骤,可以说,你只删了两个完全算很幸运了,你的逻辑完全错误,可以说牛头不对马嘴。

    至于第二次,第三次以及以后的点击,每一次点击你都可以像我这样列个表来看看。你就知道最后为什么要点两次才删除掉了,这里我就不帮你列了。


  • weibo_吾乃凤凰院凶真3999740
    2016-12-28 13:47:09

    function clearLine(){
        var content=document.getElementById("content");
        var count=0;
        for(var i=content.childNodes.length-1;i>=0;i--){
            var x=content.childNodes[i];
            if(x && x.nodeType==1){ // 非空白节点
                content.removeChild(content.childNodes[i]);
                break;
            }
        }
    }

    用if 判断该节点 是不是空白节点。 然后break语句跳出循环

  • KevinLeong4184113
    2016-12-01 22:21:51

    你这个语法完全是错的!首先,你删除一行,为什么要用for循环?for循环是用来遍历的!这里包括空格(空行)一共有11个节点,先把节点列举出来:(不用看,需要时再来查找)

    a[0]:空格;    a[1]:html;    a[2]:空格;    a[3]:php;    a[4]:空格;    a[5]:javascript;    a[6]:空格;    a[7]:jquery;    a[8]:空格;    a[9]:java;     a[10]:空格; 

    下面你可以当成一个表格来看(第一次点击“删除一行”,所发生的步骤)

    i    length    删除的节点(删除为a[length-1])   //i为偶数时,a[i].type!=1;i为奇数时,a[i].type==1;

    0    11         不删除                      //i为偶数,continue,不删除,length依然为11;

    1    11        删除a[10]:空格;         //i为奇数,删除后,length为10(此处依然为11,下面为删除后变成10)

    2    9          不删除

    3    8          删除a[9]:java

    4    7          不删除

    5    6         删除a[8]:空格;

    6    5         i<length不成立,因此不执行


    以上就是你第一次点击所执行的所有步骤,可以说,你只删了两个完全算很幸运了,你的逻辑完全错误,可以说牛头不对马嘴。

    至于第二次,第三次以及以后的点击,每一次点击你都可以像我这样列个表来看看。你就知道最后为什么要点两次才删除掉了,这里我就不帮你列了。