我用的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结构吗?
@SlaneYang 已经回答了问题的关键,注意
$.fn.remove()
和Array.prototype.pop()
是不一样的,后者是直接对数据进行操作,前者是从 DOM 树删除 DOM 元素(但元素仍然存在于内存,由 jQuery 对象/数组引用)对于你这个问题,其实我建议先通过
.filter()
把需要的元素过滤出来,再一次性remove()
:顺便提一下
const
声明而不是let
声明child
在原程序中表示若干子项,应该使用复数children
更为准确