Подтвердить что ты не робот

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, удаляю дубликаты и остаюсь со следующим, например:

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

В основном я ищу способ удалить все найденные повторяющиеся значения и показать 1 из каждой ссылки.

4b9b3361

Ответ 1

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] очень быстр в сравнении.

Ответ 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();
    }
});

Ответ 4

@interjay @Georg Fritzsche

Ваше исправление не работает в моем случае, поэтому я создаю другую версию:

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

Надежды на это дают кому-то еще действующее альтернативное короткое исправление на всякий случай.

Ответ 5

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

Ответ 6

Быстрый и простой способ -

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

Ответ 7

Хорошие люди. Вот мой

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

Привет

Ответ 8

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