jquery删除重复的li

时间:2010-10-01 11:49:40

标签: javascript jquery html

<ul id="myid">   
<li>microsoft</li>  
<li>microsoft</li>  
<li>apple</li>  
<li>apple</li>  
</ul>   

我想使用jquery从li删除重复项。

我该怎么做?

5 个答案:

答案 0 :(得分:8)

example 我发现脚本更快

var liText = '', liList = $('#myid li'), listForRemove = [];

$(liList).each(function () {

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

  if (liText.indexOf('|'+ text + '|') == -1)
    liText += '|'+ text + '|';
  else
    listForRemove.push($(this));

})​;

$(listForRemove).each(function () { $(this).remove(); });

答案 1 :(得分:7)

uniqueLi = {};

$("#myid li").each(function () {
  var thisVal = $(this).text();

  if ( !(thisVal in uniqueLi) ) {
    uniqueLi[thisVal] = "";
  } else {
    $(this).remove();
  }
})

这构建了唯一值的索引(对象)。对于您的示例,uniqueLi之后将如下所示:

{
  "microsoft": "", 
  "apple": ""
}

因此,每当遇到之前已添加到索引的值时,关联的<li>都会被删除。

答案 2 :(得分:5)

您可以使用

var inner = [];
$('li').each( function(index, Element){
    if (jQuery.inArray(this.innerHTML, inner) == -1){
      inner.push(this.innerHTML);
    }
    else {
      $(this).remove();
    }
});

答案 3 :(得分:3)

这是一个可以实现它的功能,方式略有不同:

function removeDuplicateItems(id) {
    var ul = $('#' + id);

    $('li', ul).each(function() {
        if($('li:contains("' + $(this).text() + '")', ul).length > 1)
            $(this).remove();
    });
}

使用removeDuplicateItems('myid');

进行通话

答案 4 :(得分:1)

我过去曾使用@Thariama解决方案,但我与IE6存在兼容性问题(我仍然需要支持这种恐龙)。

如果项目重复,请将其从ul中删除。它适用于动态添加的li。

            var seen = {};
            $("ul#emails_exclusion_list").find("li").each(function(index, html_obj) {
                txt = $(this).text().toLowerCase();

                if(seen[txt]) {
                    $(this).remove();
                } else {
                    seen[txt] = true;
                }
            });