Jquery удалить дубликат li

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

Я хочу удалить дубликаты из li с помощью jquery.

Как я могу это сделать?

Ответ 1

пример Я нахожу, что script быстрее

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(); });

Ответ 2

uniqueLi = {};

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

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

Создает индекс (объект) уникальных значений. Например, uniqueLi будет выглядеть следующим образом:

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

Поэтому всякий раз, когда возникает значение, которое было добавлено в индекс раньше, связанный с ним <li> удаляется.

Ответ 3

Вы можете использовать

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

Ответ 4

Здесь функция, которая будет делать это несколько иначе:

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

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

Вызов с помощью removeDuplicateItems('myid');

Ответ 5

Я использовал решение @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;
                }
            });