2013-02-18 75 views
2

我有以下jQuery代碼,用於刪除重複的列表項。有更好/更快的方法嗎? http://jsfiddle.net/Lijo/Hb28u/16/更快的jQuery代碼重複列表項刪除

HTML

<div style="width: 100px"> 
     <ul> 
      <li style="background-color: Red">A</li> 
      <li style="background-color: Red">B</li> 
      <li style="background-color: Orange">B</li> 
      <li style="background-color: Red">C</li> 
      <li style="background-color: Orange">C</li> 
      <li style="background-color: Yellow">C</li> 
      <li style="background-color: Red">D</li> 
     </ul> 
    </div> 
    <input id="Submit1" type="submit" value="submit" class="submitButton" /> 

jQuery的

 $('.submitButton').click(function (e) { 
      alert('Begin'); 
      var previousVal = 'Initial'; 

      $('ul li').each(function (i, item) { 
       var currentVal = $(item).text(); 
       if (currentVal == previousVal) { 
        $(item).remove(); 
       } 
       previousVal = currentVal; 
      }); 

      alert('End'); 
      return false; 
     } 
     ); 
+0

@Andorbal尋找更好的代碼,因爲我會有很多列表項。 – Lijo 2013-02-18 16:03:24

回答

4

我會做這樣的,但還沒有測試如果它的速度更快與否,雙方似乎快給我。

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

這是我的解決方案的一個小提琴,告訴你它需要執行的時間。 http://jsfiddle.net/54cdR/

+1

該解決方案處理不連續的重複項,原始版本不重複。 – Andorbal 2013-02-18 16:07:45

+0

@Andorbal這是真的:-) - 我已經注意到,我的原始代碼只能在副本位於相鄰位置時才能工作 – Lijo 2013-02-19 10:20:53

+0

另外,與簡單的for循環相比,$ .each()要慢得多。爲了提高性能,我建議使用for循環。 http://jsperf.com/asdasda223/4 – harsimranb 2013-06-24 22:55:39