2010-10-01 6 views
10
<ul id="myid"> 
<li>microsoft</li> 
<li>microsoft</li> 
<li>apple</li> 
<li>apple</li> 
</ul> 

मैं jquery का उपयोग करके li से डुप्लिकेट को हटाना चाहता हूं।jquery डुप्लिकेट ली

मैं यह कैसे कर सकता हूं?

+0

क्या वे हमेशा एक दूसरे के बगल में हैं, आदेश दिया गया लाइन? ऑब्जेक्ट्स के लिए 'इन' ऑपरेटर की तुलना में –

उत्तर

7

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

धन्यवाद एंड्रेस descalzo, हम इसे "लाइव" डेटा के साथ कैसे कर सकते हैं ?? – dave

+0

क्या आप एक उदाहरण दे सकते हैं जो आप करते हैं, या समस्या के साथ एक और सवाल? –

7
uniqueLi = {}; 

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

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

यह अद्वितीय मानों का सूचकांक (एक वस्तु) बनाता है। आपके उदाहरण के लिए, uniqueLi इस बाद में तरह दिखेगा:

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

तो जब भी एक मूल्य है कि इससे पहले कि सूचकांक में जोड़ा गया है का सामना करना पड़ा है, जुड़े <li> निकाल दिया जाएगा।

5

आप इस्तेमाल कर सकते हैं

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

'jQuery.inArray()' थोड़े अक्षम है। – Tomalak

3

यहाँ एक समारोह है कि यह एक अलग तरीके से करना होगा, है:

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

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

साथ कॉल removeDuplicateItems('myid');

+0

यह तब विफल हो जाएगा जब आइटम टेक्स्ट में एक एकल उद्धरण होता है। ;-) – Tomalak

+0

मैं देख सकता हूं कि आप ऐसा क्यों कहेंगे, लेकिन असल में यह कुछ नहीं है (या तो 'शामिल' चयनकर्ता या '.text()' फ़ंक्शन है, मैं यह नहीं समझ सकता कि jQuery स्रोत से कौन सा) उद्धरण ऑटो से बच निकलता है। एक नज़र डालें: http://jsfiddle.net/kXurk/ –

+0

हाय मार्क, कोड के लिए धन्यवाद। लेकिन हम इसे "लाइव" कैसे कर सकते हैं? – dave

0

मैंने अतीत में @ थारीमा समाधान का उपयोग किया है, लेकिन मेरे पास आईई 6 के साथ संगतता समस्याएं हैं (मुझे अभी भी इस डायनासोर का समर्थन करने की आवश्यकता है)।

यदि आइटम दोहराता है, तो इसे उल से हटा दें। यह गतिशील जोड़ा ली के साथ काम करता है।

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