查找列表中是否有任何重复内容并删除重复的实例

时间:2017-05-03 17:31:50

标签: javascript jquery duplicates

基本上,我尝试做的是确定所有共享同一类的项目列表中是否存在任何重复内容,然后删除所有重复内容。

这是我迄今为止的尝试,但未成功:

var listItemContent = $(".featured-listing").textContent;
if (listItemContent === listItemContent) {
    $('.featured-listing').hide();
}

这并不是真的有效,而且我并不感到惊讶,因为js不是我的强项,甚至读它看起来好像需要" .featured-的一个实例的内容 - 列出",将其与自身进行比较,然后将其隐藏,从而导致隐藏该类的所有实例。问题是我不确定如何:

  1. 检查该类的不同实例是否具有匹配的文本内容
  2. 删除所有重复的内容

3 个答案:

答案 0 :(得分:2)

试试这个代码段:



var listItemContents = [];

$(".featured-listing li").each(function() {
    var text = $(this).text();
    
    if (listItemContents.indexOf(text) == -1) {
      listItemContents.push(text);
    }
    else {
      $(this).remove();
    }
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="featured-listing">
  <li>Text 1</li>
  <li>Text 2</li>
  <li>Text 3</li>
  <li>Text 1</li>
  <li>Text 4</li>
  <li>Text 2</li>
</ul>
&#13;
&#13;
&#13;

它只是遍历所有通过数组检查其内容的项目。如果在阵列中找不到文本,则会添加该项目。如果找到,则删除列表项。

我不确定这个HTML是否与您的相同,因为您没有在帖子中添加它。如果你这样做,我们可以更清楚地了解什么对你有用。

答案 1 :(得分:1)

获取所有featured-listings。定义一个包含所有文本的主object,如果有相同的文本,则删除一个元素:

var elements = {};

$('.featured-listsing').each(function () {

    var currentText = $(this).text();

    if ( elements[currentText] )

        $(this).remove();

    else

        elements[currentText] = true;

});

答案 2 :(得分:1)

您可以过滤jQuery列表对象,并将其重复并隐藏它们。检查下一个fiddle,技巧是检查那些具有相同文本内容的兄弟姐妹的项目,并使用它们创建一个新的jQuery列表:

&#13;
&#13;
let items = $(".featured-listing li");

let repes = items.filter((ind, itm) => $(itm).prevAll(`:contains(${itm.innerText})`).length);

repes.remove();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="featured-listing">
  <li>1 - Content 01</li>
  <li>2 - Content 02</li>
  <li>1 - Content 01</li>
  <li>3 - Content 03</li>
  <li>4 - Content 04</li>
  <li>2 - Content 02</li>
  <li>5 - Content 05</li>
  <li>6 - Content 06</li>
  <li>2 - Content 02</li>
  <li>7 - Content 07</li>
</ul>
&#13;
&#13;
&#13;