为了账号安全,请及时绑定邮箱和手机立即绑定

for循环遍历出错

for循环遍历出错

函数式编程 2019-02-14 18:15:56
<body>    <div id="J_APP_Wrapper">        <div class="" recharge="true">1</div>        <div class="" recharge="true">2</div>        <div class="" recharge="true">3</div>        <div class="live-wrapper">4</div>    </div>    <script type="text/javascript">    window.onload = function() {        remove()    }    // 删除节点    function remove() {        var removeNode = document.getElementById("J_APP_Wrapper");        var removeNodeL = removeNode.children;        console.log(removeNodeL)        for (var i = 0; i < removeNodeL.length; i++) {            if (removeNodeL[i].className != "live-wrapper") {                removeNode.removeChild(removeNodeL[i])            }            // if (removeNodeL[i].getAttribute("recharge") == "true") {            //     removeNode.removeChild(removeNodeL[i])            // };        };    }    </script></body>问题是 按照我的逻辑我是删除className != "J_APP_Wrapper" 的节点 但是 结果是出现2和4 ,希望寻求帮忙 告知原因如图
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

这里 你要明白removeNodeL是储存了你的node节点元素的。既然明白这个 那么我们就能分析了


for (let i = 0; i < removeNodeL.length; i++) {


    if (removeNodeL[i].className != "live-wrapper") {

        console.log(i)

        removeNode.removeChild(removeNodeL[i]);

    }

};

当输出i时会发现

https://img1.sycdn.imooc.com//5c6f5ceb000103e900380047.jpg


按道理来说 应该会输出三次,可这里为什么只有两次呢,原因是开头说了removeNodeL是储存了节点,当你每次删除了节点后,removeNodeL数组里面的值也会减少


当i=0的时候 removeNodeL的值为<div>2</div><div>3</div><div>4</div>

当i=1的时候 (注意,此时removeNodeL[1]是<div>3</div>!)removeNodeL的值为<div>2</div><div>4</div>


这样问题就出来咯~ 主要还是会分析,希望采纳


查看完整回答
反对 回复 2019-02-22
  • 1 回答
  • 0 关注
  • 400 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信