Próbuję kierować na całą stronę linki, które nie rozpoczynają się od znaku „#” i nie zawierają wbudowanego kodu javascript, ale mam problemy ze znalezieniem odpowiedniej struktury selektora.
Na podstawie tego, co wyszukałem w Google na temat wielu selektorów, powinno to działać, oba selektory działają niezależnie, ale nie razem!
$('a:not([href*=javascript]), a:not([href^=#])')
.each(function(){...
jquery
jquery-selectors
Hill79
źródło
źródło
Odpowiedzi:
Spróbuj użyć
$('a:not([href*=javascript]):not([href^=#])') ...
źródło
$('a:not([href*=javascript],[href^=#])')
Możesz też spróbować:
$('a').not('[href^=#],[href*=javascript]')
źródło
$('a').not(selOne + ',' + selTwo + ',' + selX);
:not
raczej używać niż.not()
przy okazji, ze względu na wydajność. patrz stackoverflow.com/questions/8845811/…Jak wskazano w jQuery - Multiple Selectors in a: not ()? , oto właściwy sposób:
$( 'a:not([href*=javascript],[href^=#])' )
Nie zapomnij umieścić cudzysłowów wokół przecinków, jeśli masz już selektory do negacji w zmiennych
var selOne = '[href*=javascript]'; var selTwo = '[href^=#]'; $('a:not(' + selOne + ',' + selTwo + ')')
Przyznaję, że kod jest trochę zagmatwany, ale ma tę zaletę, że można zrobić takie rzeczy:
var selOne = '[href*=javascript], [href^=#]'; var selTwo = '.anotherSelector, .andAnother, .andSoOn'; $('a:not(' + selOne + ',' + selTwo + ')')
Jest to przydatne, gdy z jakiegoś powodu musisz pogrupować selektory, np. używając tej samej grupy selektorów w innym miejscu w kodzie.
Przykład na żywo wykorzystujący tę samą technikę
$('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>
Również na http://jsfiddle.net/bmL8gz5j/
:not
vs.not()
: Ze względu na wydajność powinieneś:not
raczej używać zamiast.not()
, zobacz Różnice w wydajności między używaniem selektorów „: not” i „.not ()”?źródło