不是jQuery中的类选择器

Zar*_*doz 255 javascript jquery jquery-selectors

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

<div class="first-foo" />
<div class="first-moo" />
<div class="first-koo" />
<div class="first-bar second-foo" />
Run Code Online (Sandbox Code Playgroud)

我只想得到前三个div并尝试过

$(div[class^="first-"][class!="first-bar"])
Run Code Online (Sandbox Code Playgroud)

但这会收到所有,因为最后一个div包含的不仅仅是第一个栏.有没有办法在这样的表达式中使用占位符?这样的事情

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

任何其他可能有帮助的选择器?

lon*_*day 512

你需要:not()选择器:

$('div[class^="first-"]:not(.first-bar)')
Run Code Online (Sandbox Code Playgroud)

或者,.not()方法:

$('div[class^="first-"]').not('.first-bar');
Run Code Online (Sandbox Code Playgroud)

  • 请注意,因为:not()比.not()(http://jsperf.com/jquery-css3-not-vs-not)快2-3倍,您可能想要使用:not().但是,jQuery文档建议使用.not(),因为它更具可读性(http://api.jquery.com/not-selector/).希望这有助于某人在两者之间做出决定! (87认同)
  • @rinogo现在绝大多数浏览器都支持querySelectorAll,速度更快,但情况并非总是如此。 (3认同)
  • 是的,确切地说!:)我希望我的评论不会被批评; 我宁愿添加你已经有用的问题. (3认同)
  • @Daniel,是的,但如果*是*,那么这是一个非常容易的改变,以获得即时性能提升:) (2认同)

Sar*_*raz 82

您可以使用:not过滤器选择器:

$('foo:not(".someClass")')
Run Code Online (Sandbox Code Playgroud)

not()方法:

$('foo').not(".someClass")
Run Code Online (Sandbox Code Playgroud)

更多信息:

  • @BoltClock:对于包含空格的值,需要它,我已经习惯了我的指定总是:) (17认同)
  • 如果将它用作CSS选择器,则应省略```. (2认同)

小智 5

您可以在“not”方法中编写一个 jQuery 选择器:

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