不是jQuery中的类选择器


270

是否有一个简单的选择器表达式,可以不选择具有特定类的元素?

<div class="first-foo" />
<div class="first-moo" />
<div class="first-koo" />
<div class="first-bar second-foo" />

我只想获取前三个div并尝试

$(div[class^="first-"][class!="first-bar"])

但这可以接收所有内容,因为最后一个div包含的内容不止第一条。有没有办法在这样的表达式中使用占位符?像这样

$(div[class^="first-"][class!="first-bar*"]) // doesn't seem to work

还有其他选择器可能会有所帮助吗?


从头开始我的评论,我只是重新阅读了这个问题。关键课是first-bar
BoltClock

如果要选择不具有class1或class2的所有元素,则可以进行串联:$('div[class^="first-"]').not('.class1').not('.class2')
J0ANMM

Answers:


543

您需要:not()选择器:

$('div[class^="first-"]:not(.first-bar)')

或者,该.not()方法:

$('div[class^="first-"]').not('.first-bar');

91
请注意,由于:not()的速度是.not()的2-3倍(jsperf.com/jquery-css3-not-vs-not),因此您可能需要使用:not()。但是,jQuery文档建议改用.not(),因为它更具可读性(api.jquery.com/not-selector)。希望这可以帮助某人在两者之间做出决定!
rinogo

2
@rinogo现在,绝大多数浏览器都支持querySelectorAll,但这种情况并非总是如此。
lonesomeday

4
是的,完全是!:)我希望我的评论不会被批评。我想补充您已经有用的问题。
rinogo

1
谢谢!!在除我的“筛选框”之外的所有框上禁用Enter键。$(“ input:not(.rgFilterBox)”)。keydown(function(e){if(e.keyCode == 13){return false;} return true;});
hardba11 2013年

3
@Daniel,是的,但是如果,那么获得即时的性能提升是一个非常容易的改变:)
rinogo

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.