jQuery - multiple: kein Selektor


79

Ich versuche, seitenweite Links zu finden, die nicht mit einem '#' beginnen und kein Inline-Javascript enthalten, aber ich habe Probleme, herauszufinden, wie der Selektor richtig strukturiert werden kann.

Basierend auf dem, was ich über mehrere Selektoren gegoogelt habe, sollte dies funktionieren. Beide Selektoren arbeiten unabhängig voneinander, nur nicht zusammen!

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

Haben Sie den Operator 'oder' ausprobiert? Wie: $ ('a: not ([href * = "javascript | #"])')
Bas Slagter

Ihr ursprünglicher Code funktioniert einwandfrei, also posten Sie bitte mehr Code und HTML, damit wir sehen können, was schief gelaufen ist.
Shadow Wizard ist Ear For You

Antworten:


139

Versuchen Sie es mit

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

8
Obwohl dies funktioniert, negieren Sie unnötigerweise zweimal. Es kann Auswirkungen auf die Leistung haben, ich weiß es nicht. Ich mag die Aussage / Einfachheit, es könnte einfacher zu lesen sein als$('a:not([href*=javascript],[href^=#])')
Adrien Be

Hi @AdrienBe In dieser Geige: jsfiddle.net/pranavcbalan/dd6tuent/2 möchte ich die zweite und die letzte Spalte vermeiden. Ich versuche dies gemäß Ihrem Rat zu tun: $ ('input: not (: last: nth-child (2))', $ tr) .each (function () {// iteriere über Eingaben außer der letzten und zweiten tot + = Number ($ (this) .val ()) || 0; // analysiere und addiere Wert, wenn NaN dann addiere 0}); aber es hilft nicht. Irgendeine Idee bitte?
3AK

@jtbandes, ich habe es auch mit deinem Vorschlag versucht, funktioniert nicht. Ich mache irgendwo einen kleinen Fehler. Könnten Sie bitte die jsfiddle überprüfen.
3AK

@Sizzler hast du es zuerst zum Laufen gebracht, indem du "nur" eine Spalte vermieden hast?
Adrien Be

@AdrienBe ja. Ich könnte es tun. Bitte schauen Sie sich diese Geige an. jsfiddle.net/sizzler/xodzm0qw/3 Ich kann hier die Spalte size1 und die Gesamtspalte vermeiden.
3AK

43

Sie könnten auch versuchen:

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

1
Kurzer Hinweis: Vergessen Sie nicht, das Komma zwischen Anführungszeichen zu setzen, wenn Sie Ihre Selektoren bereits in Variablen haben. Wie zum Beispiel:$('a').not(selOne + ',' + selTwo + ',' + selX);
Adrien Be

Aus Leistungsgründen sollten wir wahrscheinlich :noteher als .not()übrigens verwenden. siehe stackoverflow.com/questions/8845811/…
Adrien Be

16

Wie in jQuery - Multiple Selectors in a angegeben: not ()? Dies ist der richtige Weg, um dies zu tun:

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

Vergessen Sie nicht, Kommas in Anführungszeichen zu setzen, wenn Sie bereits über Selektoren verfügen, die Sie in Variablen negieren können

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

Ich gebe zu, dass der Code etwas verwirrend wird, aber es hat einen Vorteil, Sie können Dinge wie diese tun:

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

Dies ist immer dann nützlich, wenn Sie aus irgendeinem Grund Selektoren gruppieren müssen, z. Verwenden derselben Selektorgruppe an einer anderen Stelle im Code.


Ein Live-Beispiel mit derselben 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>

Auch auf http://jsfiddle.net/bmL8gz5j/


:notvs .not(): Aus Performance - Gründen sollten Sie :notstatt .not()finden Performance - Unterschiede zwischen der Verwendung von „: nicht“ und „.not ()“ Wähler?

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.