我有一个类似的列表:
<li class="listElement semiUniqueCLassOne" unique-class="semiUniqueCLassOne" style="display:none;">one</li>
<li class="listElement semiUniqueCLassOne" unique-class="semiUniqueCLassOne" style="display:none;">two</li>
<li class="listElement semiUniqueCLassOne" unique-class="semiUniqueCLassOne" style="display:none;">three</li>
<li class="listElement semiUniqueCLassTwo" unique-class="semiUniqueCLassTwo" style="display:none;">four</li>
<li class="listElement semiUniqueCLassTwo" unique-class="semiUniqueCLassTwo" style="display:none;">five</li>
<li class="listElement semiUniqueCLassThree" unique-class="semiUniqueCLassThree" style="display:none;">six</li>
我试图只显示每个semiUniqueCLass
中的第一个,所以我试图这样做:
$('.listElement').each(function(){
var uniqueClass = $(this).attr('unique-class');
if($('.'+uniqueClass).is(':first')){
$(this).show();
}
});
这不起作用......我可以通过哪些方式使其工作?试过几次,有点卡住了。
答案 0 :(得分:5)
这应该可以解决问题:
$('.listElement').hide();
$('.listElement:first-child').show();
如果listElement
类有更多元素:
$('.listElement[@class*=semiUniqueCLass]').hide();
$('.listElement[@class*=semiUniqueCLass]:first-child').show();
(仅显示/隐藏listElement
个class
,包含 semiUniqueCLass
)
答案 1 :(得分:4)
只需使用.first()方法。
$('.listElement').each(function(){
var uniqueClass = $(this).attr('unique-class');
$('.'+uniqueClass).first().show();
});
的 And the working demo 强> 的
另一种解决方案如下所示:
var clazzs = $('.listElement').map(function() {
return $(this).attr('unique-class');
});
$.unique(clazzs).each(function() {
$('.'+this).first().show();
});
的 Also the working demo 强> 的
答案 2 :(得分:2)
要显示每个唯一 semiUniqueCLass*
项的第一项,您必须手动迭代所有相关的.listElement
节点:
var shown = {}; // keep track of which class has already been shown
$('.listElement[unique-class]').each(function() {
var className = this.getAttribute('unique-class');
if (!shown[className]) {
// this class has not been seen before, show the first only
shown[className] = true;
$(this).show();
}
});
它显示了元素one
,four
和six
。
<强>更新强>
我已使用two solutions by xdazz对this jsperf benchmark进行了此答案。这个答案排在首位,亚军的速度慢了约30%(在Chrome中)。
答案 3 :(得分:-1)
此代码显示第一项:
$('[class^=listElement]').first().show();