js中删除子元素(数组塌陷)的问题

#######特别铭谢: "塌陷"一词 取自 罗老师 聊天记录

通常我们在删除某个父元素下的若干子元素的时候 习惯使用for循环遍历来实现,但是在 下面的情况确不好使了

<ul id="ull"> <li>nodeList</li> <li>nodeList</li> <li>nodeList</li> <li>nodeList</li> <li>nodeList</li> <li>nodeList</li> <li>nodeList</li> <li>nodeList</li> <li>nodeList</li> <li>nodeList</li> </ul>

原始 效果

Paste_Image.png

var uls = document.getElementById("ull"); var eles = uls.getElementsByTagName("li");
for(vari=0;i<eles.length;i++){ ------eles.item(i).parentNode.removeChild(eles.item(i)); }

执行上面的语句之后 的效果

Paste_Image.png

我们发现 , 虽然 使用了 for 循环,但是只删除了一半 , 这是为什么呢 ? 原因 为下:

我们使用for 循环遍历 eles , 当i=0的时候 , 我们删除了位置为0的元素, 此时,位置为1的元素接替了位置 0 , 但同时 i 也累加 了, 下次执行 删除 操作的时候 i 变为1 , 再次执行删除操作,其实是删除了 现在位置为1 的元素 , 中间跳过了, 所以 最后的结果 只 删除了一半


解决 办法有两种

方法一:

在循环体内让 i-- , 这样每次删除 就是 只删除 位置为0 的元素

for(vari=0;i<eles.length;i++){ ------eles.item(i).parentNode.removeChild(eles.item(i)); ------i--; }


方法二

倒着来,这样每次删除的就是最后一个位置 的元素

for(var i = eles.length-1;i>=0;i--){ eles.item(i).parentNode.removeChild(eles.item(i)); }

效果如下,全部删除

Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,349评论 0 33
  • 本章内容 理解包含不同层次节点的 DOM 使用不同的节点类型 克服浏览器兼容性问题及各种陷阱 DOM 是针对 HT...
    闷油瓶小张阅读 3,952评论 0 1
  • 走在上海的街头,猛然以为,回到了武汉。 这个城市生活气息浓郁。 法国梧桐在瘦小的街道两旁给人安全感。 总是会想到早...
    JOllyJEnny阅读 1,846评论 0 0
  • 今天立秋,秋天到了。 秋天好啊,秋天是个收获的季节! 吾之人生也到了秋天,我能坐等收获吗? 哪有那等好事儿! 人的...
    教育经典撷粹阅读 1,703评论 3 1
  • 开始写作之前,我就像坐井观天里的那只青蛙,头顶的天空还不如井口大。 那时我的身体每天在家、单位、幼儿园之间打转,我...
    热爱一生阅读 8,280评论 53 112