我有以下列表项
<ul id="lxx" class="lst">
<li>arnold</li>
<li>Becky</li>
<li>Arnold</li>
<li>KathY</li>
<li>Carol</li>
<li>ARNold</li>
<li>carol</li>
</ul>
我正在使用这个代码,它将一个类'someClass'添加到所有重复多次的项目中。
$('#lxx li').filter(function(){
return $(this).siblings().text().toUpperCase()
.indexOf($(this).text().toUpperCase()) != -1;
}).addClass('someClass');
然而,发生的事情是原始项目也会使用上面的代码突出显示,而我只希望重复的项目突出显示。因此,在阿诺德,阿诺德和ARNold只有最后两个应该突出显示。同样对于其他副本也是如此。
如何更改我的代码以适应这种情况? 还有更好的方法吗?
答案 0 :(得分:4)
尝试
var texts = {};
$('#lxx li').filter(function () {
var text = $.trim($(this).text().toLowerCase());
if (texts[text]) {
return true;
}
texts[text] = this;
return false;
}).addClass('someClass');
演示:Fiddle
答案 1 :(得分:3)
您的代码段几乎正确无误。只需使用prevAll
,它只选择以前的元素,而不是siblings
。
$('#lxx li').filter(function(){
return $(this).prevAll().text().toUpperCase()
.indexOf($(this).text().toUpperCase()) != -1;
}).addClass('someClass');
答案 2 :(得分:1)
为了让你的工作,我认为切片是一种选择。
$('#lxx li').filter(function(){
return $(this).siblings().text().toUpperCase().indexOf($(this).text().toUpperCase()) != -1;
}).slice(1).addClass('someClass');