隐藏列表中的相同元素

时间:2014-12-14 00:08:26

标签: javascript jquery

我有一个问题,我想用jQuery解决。在列表中,我想检查两个项目是否具有相同的文本,如果是,我想删除第二个项目。

我不确定该怎么做。

标记很简单,有点像这样

<ul>
    <li>Text1</li>
    <li>Text2</li>
    <li>Text1</li>
    <li>Text3</li>
    <li>Text3</li>
    <li>Text4</li>
<ul>

我无法使用有效/无效课程,因为此列表是动态的,我事先并不知道它将如何填充。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

你可以做到这一点,例如像这样:

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

Fiddle

作为解释:unique被初始化为对象。虽然each()会对所有li个元素进行迭代,但if (unique[txt])true,以防先前true的{​​{1}}文本设置为li目前已处理。在这种情况下,将删除当前li。如果不是,则unique[txt]的当前li文本的unique设置为true并添加到unique。由于可能不清楚{ Text1=true, Text2=true, Text3=true, Text4=true }最终包含的内容:{{1}}

答案 1 :(得分:1)

$。inArray可以使用tmp数组。

&#13;
&#13;
  
$(document).ready(function(){
  
  var tmparr = [];
  $('.list li').each(function(i,item){
    if($.inArray($(this).text(), tmparr) >= 0){
      $(this).remove();
    }else{
      tmparr.push($(this).text());
    }
 });
    
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<ul class="list">
    <li>Text1</li>
    <li>Text2</li>
    <li>Text1</li>
    <li>Text3</li>
    <li>Text3</li>
    <li>Text4</li>
<ul>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您需要迭代li元素并将其文本存储在数组中。如果第i个元素的文本已经在数组中,请跳过它。获得一系列唯一文本字符串后,删除所有li元素并从数组中的信息中生成新元素。

答案 3 :(得分:0)

http://jsfiddle.net/k255o52e/1/

$('ul li').each(function () {
    var txt = $(this).text();
    // finds all LI that contain the same text
    // excludes the first element
    var $li = $('li:contains("' + txt + '"):not(:first)');
    // and removes the other
    $li.remove();

})

<强>更新

$('ul li').each(function () {
    var txt = $(this).text();
    var $li = $('li:contains("' + txt + '"):not(:first)').filter(function(index)
    {
        return $(this).text() === txt;
    });
    $li.remove();

})