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(){...
Hill79
quelle
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
Mögliches Duplikat von jQuery - Multiple Selectors in a: not ()?
Adrien Be

Antworten:

139

Versuchen Sie es mit

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

Adrien Be
quelle