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.
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.
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/
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();
}
});
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();
}
});
});
});
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.
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();
});
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
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();
}
});
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