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,删除dups和留下以下例如:
<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; });
说明:
seen
是一个对象,将任何以前看到的文字映射到true
。 它作为一个集合包含所有以前看到的文本。 行if (seen[txt])
检查文本是否在集合中。 如果是这样,我们已经看过这个文本,所以我们删除链接。 否则,这是我们第一次看到的链接文本。 我们将其添加到该集合,以便任何进一步的链接与相同的文字将被删除。
表示集合的另一种方法是使用包含所有值的数组。 然而,这会让它慢得多,因为看看数组中是否有值,我们每次都需要扫描整个数组。 使用seen[txt]
对象中的关键字比较快。
使用jQuery方法$ .unique()
// use an object as map var map = {}; $("a").each(function(){ var value = $(this).text(); if (map[value] == null){ map[value] = true; } else { $(this).remove(); } });
$(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(); } }); }); });
@interjay @Georg Fritzsche
您的修复程序在我的情况下不起作用,所以我构build了不同的版本:
var seen=''; $('a').each(function(){ var see=$(this).text(); if(seen.match(see)){ $(this).remove();} else{ seen=seen+$(this).text(); } });
希望这为其他人提供一个有效的替代短期修复以防万一。
一个快速和简单的方法是
$("a").each(function(){ if($(this).parent().length) $("a:contains('" + $(this).html() + "')").not(this).remove(); });
好的解决scheme的人 这是我的
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; } } }
问候
$('.photo').each(function (index) { if (index > 0) { $(this).remove(); } });