No selector de clase en jQuery


271

¿Existe una expresión de selector simple para no seleccionar elementos con una clase específica?

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

Solo quiero obtener los primeros tres divs e intenté

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

Pero esto recibe todo ya que el último div contiene más que la primera barra. ¿Hay alguna manera de usar un marcador de posición en tal expresión? Algo como eso

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

¿Algún otro selector que pueda ayudar?


Rasca mi comentario anterior, acabo de releer la pregunta. La clase crítica es first-bar.
BoltClock

En caso de que uno quiera seleccionar todos los elementos que no tienen clase 1 o clase 2, la concatenación funcionaría:$('div[class^="first-"]').not('.class1').not('.class2')
J0ANMM

Respuestas:


544

Necesitas el :not()selector:

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

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

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

9191
Tenga en cuenta que dado que: not () es hasta 2-3 veces más rápido que .not () ( jsperf.com/jquery-css3-not-vs-not ), es posible que desee usar: not (). Sin embargo, los documentos de jQuery recomiendan usar .not () en su lugar, ya que es más legible ( api.jquery.com/not-selector ). ¡Espero que esto ayude a alguien a tomar una decisión entre los dos!
rinogo

2
@rinogo Ahora es más rápido que la gran mayoría de los navegadores admiten querySelectorAll, pero ese no siempre ha sido el caso.
solitario el

44
Sí, exactamente! :) Espero que mi comentario no parezca una crítica; Prefiero agregar a su ya útil pregunta.
rinogo

1
¡¡Gracias!! deshabilite la tecla Intro en todos menos mis cuadros de filtrado. $ ("input: not (.rgFilterBox)"). keydown (function (e) {if (e.keyCode == 13) {return false;} return true;});
hardba11

3
@Daniel, sí, pero si es así , entonces es un cambio súper fácil obtener un aumento instantáneo del rendimiento :)
rinogo

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.