jQuery - múltiple: no selector


80

Estoy tratando de apuntar a enlaces de toda la página que no comienzan con un '#' y no incluyen javascript en línea, pero tengo problemas para descubrir cómo estructurar el selector correctamente.

Según lo que busqué en Google sobre múltiples selectores, esto debería funcionar, ambos selectores funcionan de forma independiente, ¡pero no juntos!

$('a:not([href*=javascript]), a:not([href^=#])')
.each(function(){...

¿Ha probado el operador 'or'? Me gusta: $ ('a: not ([href * = "javascript | #"])')
Bas Slagter

Su código original funciona bien, así que publique más código y el HTML para que podamos ver qué salió mal.
Shadow Wizard está vacunándose

Respuestas:


141

Intenta usar

$('a:not([href*=javascript]):not([href^=#])') ...

8
Aunque esto funciona, se niega innecesariamente 2 veces. Puede tener un impacto en el rendimiento, no lo sé. Sin embargo, me gusta la claridad / simplicidad, podría ser más fácil de leer que$('a:not([href*=javascript],[href^=#])')
Adrien Be

Hola @AdrienBe En este violín: jsfiddle.net/pranavcbalan/dd6tuent/2 Quiero evitar la segunda columna y la última. Estoy tratando de hacer esto según su consejo: $ ('input: not (: last: nth-child (2))', $ tr) .each (function () {// iterar sobre las entradas excepto la última y la segunda tot + = Number ($ (this) .val ()) || 0; // analizar y agregar valor, si es NaN, agregar 0}); pero no ayuda. ¿Alguna idea por favor?
3AK

@jtbandes, también intenté con tu sugerencia, no funciona. Estoy cometiendo un pequeño error en alguna parte. ¿Podría consultar el archivo jsfiddle.
3AK

@Sizzler, ¿lo hiciste funcionar primero evitando "solo" una columna?
Adrien Be

@AdrienBe sí. Yo podría hacerlo. Por favor, mira este violín. jsfiddle.net/sizzler/xodzm0qw/3 Puedo evitar la columna size1 y la columna total aquí.
3AK

43

También puedes probar:

$('a').not('[href^=#],[href*=javascript]')

1
Nota rápida: no olvide agregar la coma entre comillas si ya tiene sus selectores en variables. Tales como:$('a').not(selOne + ',' + selTwo + ',' + selX);
Adrien Be

Probablemente deberíamos usar en :notlugar de .not()por cierto, por razones de rendimiento. ver stackoverflow.com/questions/8845811/…
Adrien Be

16

Como se indica en jQuery - Selectores múltiples en a: not ()? , esta es la forma correcta de hacer esto:

$( 'a:not([href*=javascript],[href^=#])' )

No olvide poner comillas entre comillas si ya tiene sus selectores para negar las variables

var selOne = '[href*=javascript]';
var selTwo = '[href^=#]';
$('a:not(' + selOne + ',' + selTwo + ')')

Admito que el código se vuelve un poco confuso pero tiene una ventaja, puedes hacer cosas como esta:

var selOne = '[href*=javascript], [href^=#]';
var selTwo = '.anotherSelector, .andAnother, .andSoOn';
$('a:not(' + selOne + ',' + selTwo + ')')

Es útil siempre que necesite agrupar selectores por alguna razón, es decir. utilizando el mismo grupo de selectores en otra parte del código.


Un ejemplo vivo usando la misma técnica.

$('div:not(.rose-flower,.bus-vehicle)').css('color','red');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="bus-vehicle">I am a bus</div>
<div class="strawberry-fruit">I am a strawberry</div>
<div class="rose-flower">I am a rose</div>

También en http://jsfiddle.net/bmL8gz5j/


:notvs .not(): Por motivos de rendimiento, debería utilizar en :notlugar de .not(), consulte Diferencias de rendimiento entre el uso de los selectores ": not" y ".not ()"?

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.