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

循环删除子元素,却只删除了最后一个?

循环删除子元素,却只删除了最后一个?

至尊宝的传说 2019-02-05 19:23:37
我用的zepto,一开始,采用如下代码:let parent = $('.parent'),  child = parent.find('.child');for (let i = 0; i < 5; i++) {  child.eq(-1).remove();}我的本意是希望删除最后五个子元素,但实际却只删除了最后一个。我知道,可以通过如下代码删除:let parent = $('.parent');for (let i = 0; i < 5; i++) {  parent.find('.child').eq(-1).remove();}这段代码。应该是每次循环,每次去查询dom,所以依次删了最后五个。但我的疑问是,为何第一段代码不行?第一段里的 child 不会去查询dom结构吗?
查看完整描述

1 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

注意 $.fn.remove() 和 Array.prototype.pop() 是不一样的,后者是直接对数据进行操作,前者是从 DOM 树删除 DOM 元素(但元素仍然存在于内存,由 jQuery 对象/数组引用)


对于你这个问题,其实我建议先通过 .filter() 把需要的元素过滤出来,再一次性 remove():


const parent = $(".parent");

const children = parent.find(".child");

const firstIndexForRemoving = children.length - 5;

children.filter(i => i >= firstIndexForRemoving).remove();

顺便提一下


我这个答案不是解决你的问题,只是锦上添花,喜欢请赞,但不太适合采纳

对于不会再改变的变量,建议使用 const 声明而不是 let 声明

尽量不要在声明变量的时候使用逗号运算符一次声明多个变量(压缩工具会自动处理成这种结果,但自己写代码不要这么写),尤其是对变量立即初始化的时候

child 在原程序中表示若干子项,应该使用复数 children 更为准确


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号