JQuery удалить дубликаты li

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

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

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

 Nick Craver01 окт. 2010 г., 14:01
Они всегда рядом друг с другом, упорядочены ли эти строки?

Ответы на вопрос(5)

но у меня проблемы с совместимостью с IE6 (мне все еще нужно поддерживать этого динозавра).

Если элемент повторяется, удалите его с ул. Работает с динамическим добавлением 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;
                }
            });
uniqueLi = {};

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

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

Это построить индекс (объект) уникальных значений. Для вашего примераuniqueLi будет выглядеть так потом:

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

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

Решение Вопроса

пример Я считаю, что скрипт быстрее

', 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(); });
 andres descalzo05 окт. 2010 г., 14:37
Не могли бы вы привести пример с тем, что вы делаете, или другой вопрос с проблемой?
 dave05 окт. 2010 г., 06:25
Спасибо andres descalzo, Как мы можем сделать это с данными "LIVE" ??

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

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

Позвонить сremoveDuplicateItems('myid');

 Mark Bell05 окт. 2010 г., 07:58
Не уверен, что вы подразумеваете под «Live», Дейв, - если вы имеете в виду, что вы добавляете больше элементов в список на стороне клиента и хотите также их дедуплицировать, просто вызывайте эту функцию каждый раз, когда добавляете новые элементы. В противном случае, пожалуйста, дайте немного больше объяснений (или задайте новый вопрос).
 Mark Bell01 окт. 2010 г., 18:06
Я понимаю, почему ты так говоришь, но на самом деле это не так - что-тоcontains селектор или.text() функция, я не могу понять, какой из источника jQuery) автоматически экранирует кавычки. Взглянуть:jsfiddle.net/kXurk
 Tomalak01 окт. 2010 г., 16:24
Это не удастся, если текст элемента содержит одну кавычку. ;-)
 dave05 окт. 2010 г., 06:52
Привет Марк, спасибо за код. но как мы можем сделать это "Live"?

Вы могли бы использовать

var inner = [];
$('li').each( function(index, Element){
    if (jQuery.inArray(this.innerHTML, inner) == -1){
      inner.push(this.innerHTML);
    }
    else {
      $(this).remove();
    }
});
 Tomalak01 окт. 2010 г., 16:22
jQuery.inArray() является своего рода неэффективным по сравнению сin оператор для объектов.

Ваш ответ на вопрос