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

参考代码是怎样执行的

每次循环以后,content.childNodes.length的值为什么会发生变化,变量content是在for循环外声明的啊

function clearText() {
   var content=document.getElementById("content");
   for(var i=content.childNodes.length-1;i>=0;i--){
      var childNode = content.childNodes[i];
      content.removeChild(childNode);
   }
 }


提问者:我要吃冰激凌 2016-03-13 17:44

个回答

  • LeingK
    2016-03-13 22:59:30
    已采纳

    那个,你是不是忽视了这句:content.removeChild(childNode);

    你都删掉一个子节点了,长度肯定会变化呀,content.childNodes.length的值肯定每次都会减1;

    问题是,参考代码跟content的长度有半毛钱关系!!!

    先说for循环的执行条件,语句一是赋值语句,只是在开始的时候执行一次,只执行一次!!!

    也就是说,content.childNodes.length只执行了一次,后面的循环跟它木有半毛钱关系,它只是给变量i一个初始值而已

    然后再说下循环条件,i>=0;这个很容易懂吧,只要只要符合条件就会循环一次,

    然后i--也很容易懂得吧,循环一次i的值就减1,

    然后在说下循环体吧,就是每次都删除下标为i的节点而已,

    首先第一次循环,i的值是length-1,很明显是删除的是数组的最后一个对象,数组删掉一个对象,length肯定减少一个,然后i的值也减少一个,所以之后每次的循环其实删除的都是数组最后的一个对象,直到删除最后一个节点,i的值成了负值退出循环。

    所以,我觉得楼主可以多多参考一下这个w3school