Não é um seletor de classe no jQuery


271

Existe uma expressão seletora simples para não selecionar elementos com uma classe específica?

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

Eu só quero pegar os três primeiros divs e tentei

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

Mas isso recebe tudo, pois a última div contém mais que a primeira barra. Existe uma maneira de usar um espaço reservado nessa expressão? Algo parecido

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

Algum outro seletor que possa ajudar?


Risque meu comentário anterior, apenas reli a pergunta. Classe crítica é first-bar.
BoltClock

Caso alguém deseje selecionar todos os elementos que não possuem classe1 ou classe2, a concatenação funcionaria:$('div[class^="first-"]').not('.class1').not('.class2')
J0ANMM

Respostas:


544

Você precisa do :not()seletor:

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

ou, alternativamente, o .not()método:

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

91
Observe que, como: not () é até 2-3 vezes mais rápido que .not () ( jsperf.com/jquery-css3-not-vs-not ), convém usar: not (). No entanto, os documentos do jQuery recomendam o uso de .not (), pois é mais legível ( api.jquery.com/not-selector ). Espero que isso ajude alguém a tomar uma decisão entre os dois!
Rinogo 22/07

2
@rinogo É mais rápido agora que a grande maioria dos navegadores suporta querySelectorAll, mas esse nem sempre foi o caso.
Loneomeday

4
Sim, exatamente! :) Espero que meu comentário não tenha aparecido como crítica; Eu pretendia acrescentar à sua pergunta já útil.
Rinogo 23/07

1
Obrigado!! desativar a tecla enter em todas as caixas de filtragem, exceto minhas. $ ("input: not (.rgFilterBox)"). keydown (função (e) {if (e.keyCode == 13) {return false;} return true;});
hardba11

3
@ Daniel, sim, mas se ele é , então é uma mudança fácil super para obter um aumento de desempenho instantâneo :)
rinogo

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.