Скажите, что у меня есть список ссылок с дублирующимися значениями как указано ниже:
<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 из каждой ссылки.
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]
по сравнению с ним выполняется очень быстро.
// use an object as map
var map = {};
$("a").each(function(){
var value = $(this).text();
if (map[value] == null){
map[value] = true;
} else {
$(this).remove();
}
});
Быстрый и простой способ был бы
$("a").each(function(){
if($(this).parent().length)
$("a:contains('" + $(this).html() + "')").not(this).remove();
});