假设我有一个重复值的链接列表,如下所示:
<a href="#">Book</a>
<a href="#">Magazine</a>
<a href="#">Book</a>
<a href="#">Book</a>
<a href="#">DVD</a>
<a href="#">DVD</a>
<a href="#">DVD</a>
<a href="#">Book</a>
我如何使用JQuery删除重复项,并留下以下内容:
<a href="#">Book</a>
<a href="#">Magazine</a>
<a href="#">DVD</a>
基本上我正在寻找一种方法来删除找到的任何重复值并显示每个链接的1个。
答案 0 :(得分:108)
var seen = {};
$('a').each(function() {
var txt = $(this).text();
if (seen[txt])
$(this).remove();
else
seen[txt] = true;
});
<强>解释强>
seen
是一个将以前看到的任何文本映射到true
的对象。它的作用是set,包含所有以前看过的文本。行if (seen[txt])
检查文本是否在集合中。如果是这样,我们之前已经看过这个文本,所以我们删除了链接。否则,这是我们第一次看到的链接文本。我们将其添加到集合中,以便删除具有相同文本的任何其他链接。
表示集合的另一种方法是使用包含所有值的数组。但是,这会使速度慢得多,因为要查看数值是否在我们每次扫描整个数组所需的数组中。使用seen[txt]
查找对象中的键非常快。
答案 1 :(得分:11)
答案 2 :(得分:3)
// use an object as map
var map = {};
$("a").each(function(){
var value = $(this).text();
if (map[value] == null){
map[value] = true;
} else {
$(this).remove();
}
});
答案 3 :(得分:1)
@interjay @Georg Fritzsche
你的修复程序在我的情况下不起作用所以我构建了一个不同的版本:
var seen='';
$('a').each(function(){
var see=$(this).text();
if(seen.match(see)){
$(this).remove();}
else{
seen=seen+$(this).text();
}
});
希望这为其他人提供有效的替代短修,以防万一。
答案 4 :(得分:1)
$(document).ready(function(){
$("select").each(function () {
var selectedItem = $(this).find('option').filter(':selected').text();
var selectedItemValue = $(this).find('option').filter(':selected').val();
$(this).children("option").each(function(x){
if(this.text == selectedItem && $(this).val() != selectedItemValue) {
$(this).remove();
}
});
});
});
答案 5 :(得分:-1)
快速简便的方法是
$("a").each(function(){
if($(this).parent().length)
$("a:contains('" + $(this).html() + "')").not(this).remove();
});
答案 6 :(得分:-1)
很好的解决方案的人。 这是我的
for (i = 0; i < $('li').length; i++) {
text = $('li').get(i);
for (j = i + 1; j < $('li').length; j++) {
text_to_compare = $('li').get(j);
if (text.innerHTML == text_to_compare.innerHTML) {
$(text_to_compare).remove();
j--;
maxlength = $('li').length;
}
}
}
问候
答案 7 :(得分:-2)
$('.photo').each(function (index) {
if (index > 0) {
$(this).remove();
}
});