我有一个小的jQuery选择器问题,我有以下html:
<div class="member-info first"></div>
<div class="member-info"></div>
<div class="member-info"></div>
我想使用jQuery隐藏所有包含“member-info”类的div,但不包括包含“first”类的div,你有什么想法吗?
我有一个小的jQuery选择器问题,我有以下html:
<div class="member-info first"></div>
<div class="member-info"></div>
<div class="member-info"></div>
$('.member-info:not(.first)').hide();
这里使用了not-selector
(文档)来排除具有first
类的元素。
或者如果first
类的作用只是为了标识第一个,那么可以改为:
$('.member-info').slice(1).hide();
这里使用了slice()
(文档)方法,用于返回从第二个匹配项开始的一组结果。
first
类始终在集合中的第一个匹配项上,那么使用切片就是正确的方法。 - user113716使用:not()选择器。例如:
$(".member-info:not(first)").hide();
$(".member-info:not(member-info:first)").hide();
$(".member-info:not('.first')").hide();
$(".member-info").filter(":not('.first')").hide();
$('.member-info').not('.first').hide();
$(".member-info:not(:first)").hide();
$(".member-info").filter(":not(':first')").hide();
$('.member-info').not(':first').hide();
$(".member-info:not(:eq(0))").hide();
$(".member-info").filter(":not(':eq(0)')").hide();
$(".member-info").not(":eq(0)").hide();
$(".member-info:not(:lt(1))").hide();
$(".member-info").filter(":not(':lt(1)')").hide();
$(".member-info").not(":lt(1)").hide();
$(".member-info:gt(0)").hide();
$(".member-info").filter(':gt(0)').hide();
$(".member-info").slice(1).hide();
$(".member-info").slice(1).hide();
,看起来相对应,不是脑力激荡的答案。$('div.member-info:gt(0)')
我也遇到了这个问题。然而,我没有方便地使用一个名为first
的类来标记我的元素以进行排除。以下是我在此示例上下文中使用的选择器解决方案:
$('.member-info:not(:first)');//grab all .member-info except the first match
这样怎么样:$('.member-info').not('.first').hide();
@AuthorProxy
、@David Thomas
和 @Maximilian Ehlers
都在他们的回答中建议使用 $('.member-info').not('.first').hide();
,这是一个非常快速和易于阅读的解决方案。
由于 jQuery 选择器是从右往左进行评估的,因此相当易读的 ".member-info:not(.first)"
实际上会因此而减慢速度。
一个快速且易于阅读的解决方案确实是使用函数版本的 .not(".first")
或者只是 .not(":first")
:
例如:
$(".member-info").not(".first").hide(); // Class selector
或者
$(".member-info").not(":first").hide(); // Positional selector
相关选择器的JSPerf: http://jsperf.com/fastest-way-to-select-all-expect-the-first-one/6
.not(':first')
相较于 slice(1)
只慢了几个百分点,但可读性非常好,表达的意思是“我想要除第一个之外的所有项目”。
':not(:first)'
、':not(.first)'
甚至':not(first)'
! - Bob Stein