JQuery:删除重复的元素?

说我有一个重复值的链接列表如下:

<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,删除dups和留下以下例如:

 <a href="#">Book</a> <a href="#">Magazine</a> <a href="#">DVD</a> 

基本上我正在寻找一种方法来删除任何重复的价值观,并显示每个链接1。

 var seen = {}; $('a').each(function() { var txt = $(this).text(); if (seen[txt]) $(this).remove(); else seen[txt] = true; }); 

说明:

seen是一个对象,将任何以前看到的文字映射到true 。 它作为一个集合包含所有以前看到的文本。 行if (seen[txt])检查文本是否在集合中。 如果是这样,我们已经看过这个文本,所以我们删除链接。 否则,这是我们第一次看到的链接文本。 我们将其添加到该集合,以便任何进一步的链接与相同的文字将被删除。

表示集合的另一种方法是使用包含所有值的数组。 然而,这会让它慢得多,因为看看数组中是否有值,我们每次都需要扫描整个数组。 使用seen[txt]对象中的关键字比较快。

使用jQuery方法$ .unique()

详情请参阅http://api.jquery.com/jQuery.unique/

 // use an object as map var map = {}; $("a").each(function(){ var value = $(this).text(); if (map[value] == null){ map[value] = true; } else { $(this).remove(); } }); 
 $(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(); } }); }); }); 

@interjay @Georg Fritzsche

您的修复程序在我的情况下不起作用,所以我构build了不同的版本:

 var seen=''; $('a').each(function(){ var see=$(this).text(); if(seen.match(see)){ $(this).remove();} else{ seen=seen+$(this).text(); } }); 

希望这为其他人提供一个有效的替代短期修复以防万一。

一个快速和简单的方法是

 $("a").​​​​​​​​each(function(){ if($(this).parent().length) $("a:contains('" + $(this).html() + "')").not(this).remove(); });​ 

好的解决scheme的人 这是我的

 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; } } } 

问候

 $('.photo').each(function (index) { if (index > 0) { $(this).remove(); } });