jQuery - wielokrotność: nie selector

80

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(){...
Hill79
źródło
Czy próbowałeś operatora „lub”? Na przykład: $ ('a: not ([href * = "javascript | #"])')
Bas Slagter
Twój oryginalny kod działa poprawnie, więc prześlij więcej kodu i HTML, abyśmy mogli zobaczyć, co poszło nie tak ..
Shadow Wizard is Vaccinating
możliwy duplikat jQuery - Multiple Selectors in a: not ()?
Adrien Be

Odpowiedzi:

141

Spróbuj użyć

$('a:not([href*=javascript]):not([href^=#])') ...
jtbandes
źródło
8
Chociaż to działa, niepotrzebnie negujesz 2 razy. Może to mieć wpływ na wydajność, nie wiem. Podoba mi się jasność / prostota, ale może być łatwiejsze do odczytania niż$('a:not([href*=javascript],[href^=#])')
Adrien Be
Cześć @AdrienBe W tych skrzypcach: jsfiddle.net/pranavcbalan/dd6tuent/2 Chcę uniknąć drugiej kolumny i ostatniej. Próbuję to zrobić zgodnie z twoją radą: $ ('input: not (: last: nth-child (2))', $ tr) .each (function () {// iteruj po danych wejściowych z wyjątkiem ostatniego i drugiego tot + = Number ($ (this) .val ()) || 0; // przeanalizuj i dodaj wartość, jeśli NaN to dodaj 0}); ale to nie pomaga. Masz jakiś pomysł?
3AK
@jtbandes, próbowałem również z twoją sugestią, nie działa. Popełniam gdzieś mały błąd. Czy mógłbyś sprawdzić plik jsfiddle.
3AK
@Sizzler, czy to działało jako pierwsze, unikając „tylko” jednej kolumny?
Adrien Be
@AdrienBe yes. Mógłbym to zrobić. Proszę, sprawdź to skrzypce. jsfiddle.net/sizzler/xodzm0qw/3 Jestem w stanie pominąć tutaj kolumnę size1 i kolumnę total.
3AK
43

Możesz też spróbować:

$('a').not('[href^=#],[href*=javascript]')
DarkAjax
źródło
1
Szybka uwaga: nie zapomnij dodać przecinka między cudzysłowami, jeśli masz już selektory w zmiennych. Na przykład:$('a').not(selOne + ',' + selTwo + ',' + selX);
Adrien Be
Prawdopodobnie powinniśmy :notraczej używać niż .not()przy okazji, ze względu na wydajność. patrz stackoverflow.com/questions/8845811/…
Adrien Be
16

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/


:notvs .not(): Ze względu na wydajność powinieneś :notraczej używać zamiast .not(), zobacz Różnice w wydajności między używaniem selektorów „: not” i „.not ()”?

Adrien Be
źródło