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(){...
Hill79
fuente
¿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
posible duplicado de jQuery - Selectores múltiples en a: not ()?
Adrien Be

Respuestas:

141

Intenta usar

$('a:not([href*=javascript]):not([href^=#])') ...
jtbandes
fuente
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]')
DarkAjax
fuente
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 ()"?

Adrien Be
fuente