JQuery: usunąć zduplikowane elementy?

Powiedzmy, że mam listę linków o zduplikowanych wartościach jak poniżej:

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

Jak, używając JQuery, usunąć dups i pozostawić na przykład następujące:

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

Zasadniczo szukam sposobu, aby usunąć wszystkie znalezione zduplikowane wartości i pokazać 1 z każdego linku.

Author: Georg Fritzsche, 2010-05-13

8 answers

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

Explanation:

seen jest obiektem, który mapuje dowolny wcześniej widziany tekst do true. Działa jako zbiór zawierający wszystkie wcześniej widziane teksty. Linia if (seen[txt]) sprawdza, czy tekst znajduje się w zbiorze. Jeśli tak, widzieliśmy już ten tekst, więc usuwamy link. W przeciwnym razie jest to tekst linku, który widzimy po raz pierwszy. Dodajemy go do zestawu, aby wszelkie dalsze linki z tym samym tekstem zostały usunięte.

Alternatywnym sposobem reprezentacji zbioru jest używa tablicy zawierającej wszystkie wartości. Jednakże, to sprawi, że będzie znacznie wolniej, ponieważ aby sprawdzić, czy wartość jest w tablicy, musimy skanować całą tablicę za każdym razem. Wyszukiwanie klucza w obiekcie za pomocą seen[txt] jest bardzo szybkie w porównaniu.

 105
Author: interjay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-12 22:05:57

Użyj metody jQuery $.unique()

Szczegóły patrz na http://api.jquery.com/jQuery.unique/

 10
Author: Vladimir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-15 14:55:26
// 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
Author: coolnalu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-12 21:47:22
$(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();
            }
        });
    }); 
});
 1
Author: Saleh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-19 12:24:46

@interjay @Georg Fritzsche

Twoja poprawka nie zadziałała w moim przypadku więc zbudowałem inną wersję:

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

Ma nadzieję, że zapewni to komuś innemu poprawną alternatywną poprawkę na wszelki wypadek.

 1
Author: Ben Muircroft,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-20 06:46:39

Szybkim i łatwym sposobem byłoby

$("a").​​​​​​​​each(function(){
    if($(this).parent().length)
        $("a:contains('" + $(this).html() + "')").not(this).remove();
});​
 -1
Author: Anders Mattson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-12 22:03:17

Ładne rozwiązanie ludzie. Here is mine

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

Pozdrowienia

 -1
Author: Luis Eduardo Telaya Escobedo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-29 20:32:02
$('.photo').each(function (index) { 
    if (index > 0) { 
        $(this).remove(); 
    } 
});
 -2
Author: user32285,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-11 16:26:25