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 из каждой ссылки.

40
задан Georg Fritzsche 29 May 2010 в 03:33
поделиться

3 ответа

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

Объяснение:

visible - это объект, который отображает любой ранее увиденный текст в true . Он функционирует как набор , содержащий все ранее просмотренные тексты. Строка if (visible [txt]) проверяет, есть ли текст в наборе. Если это так, мы видели этот текст раньше, поэтому удаляем ссылку. В противном случае это текст ссылки, который мы видим впервые. Мы добавляем его в набор, чтобы все дальнейшие ссылки с таким же текстом были удалены.

Альтернативный способ представления набора - использование массива, содержащего все значения. Однако это значительно замедлит процесс, поскольку, чтобы увидеть, находится ли значение в массиве, нам нужно каждый раз сканировать весь массив. Поиск ключа в объекте с помощью seen [txt] по сравнению с ним выполняется очень быстро.

111
ответ дан 27 November 2019 в 01:07
поделиться
// 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
ответ дан 27 November 2019 в 01:07
поделиться

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

$("a").​​​​​​​​each(function(){
    if($(this).parent().length)
        $("a:contains('" + $(this).html() + "')").not(this).remove();
});​
-1
ответ дан 27 November 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: