jQuery如何移除重复data-id元素并保留最后出现的实例?
保留每个data-id对应的最后出现元素的解决方案
需求说明
需要过滤带有data-id属性的元素,仅保留每个data-id对应的最后出现的实例。示例HTML如下:
<div data-id="001">Hello</div> <div data-id="001">World</div> <div data-id="002">Keep</div> <div data-id="002">Only</div> <div data-id="002">Unique</div> <div data-id="003">Last</div> <div data-id="003">Word</div> <div data-id="004">Please</div>
期望最终保留的元素内容为:World Unique Word Please
现有代码(保留第一个实例)
以下jQuery代码可实现保留每个data-id的第一个出现实例,但不符合需求:
var found = {}; $('[data-id]').each(function(){ var $this = $(this); if(found[$this.data('id')]){ $this.remove(); } else{ found[$this.data('id')] = true; } });
解决方案(保留最后一个实例)
要保留最后出现的实例,可通过反向遍历元素,标记已处理的data-id并移除靠前的重复项:
var found = {}; // 反向遍历所有带data-id的元素 $('[data-id]').get().reverse().forEach(function(el) { var $el = $(el); var id = $el.data('id'); if (found[id]) { $el.remove(); } else { found[id] = true; } });
思路说明
- 用
.get()将jQuery对象转为DOM数组,再通过.reverse()反转遍历顺序,从最后一个元素开始处理 - 遍历中记录已处理的
data-id,若当前元素的ID已存在,则移除该元素(对应原顺序中靠前的重复项) - 未记录过的ID标记为已处理,保留该元素(即原顺序中的最后一个实例)
内容的提问来源于stack exchange,提问作者purple11111
相关产品推荐
相关产品推荐

