2009-03-02 10 views
19

Versuchen Sie, hier einen ziemlich komplexen jQuery-Selektor zu erstellen und Probleme zu haben.jQuery Selektor Frage. Wählen Sie alle Knoten aus, die NICHT mit (Zeichenfolge) beginnen

Im Grunde versuche ich, alle Anker zu greifen, dass 1) keine „rel“ von „Facebox“ haben, und OR 2) nicht über einen „href“, die mit „mailto beginnt ". Diese

ist, was ich zu tun versucht:

$('a[rel!=facebox], a[href!^="mailto"]') 

Kleine Variationen dieses scheint nicht zu funktionieren. Gibt es dafür einen besseren Weg?

scheinen Diese Selektoren individuell zu arbeiten, aber nicht, wenn nacheinander in derselben Wähler sitzen:

$('a:not([rel=facebox]), a:not([href^=mailto])') 

Endlösung: Wir haben einen Gewinner!

$('a:not([rel=facebox],[href^=mailto])') 
+0

Seltsam, $ ('a: nicht ([rel = facebox]') und $ ('a: nicht ([href^= mailto]') funktionieren gut, aber nicht beide durch ein Komma getrennt. –

+0

Das liegt daran Die Kommas fügen das Objekt danach zum jQuery-Objekt hinzu und selektieren effektiv alle außer th e Knoten, die sowohl rel = Facebox als auch href mit mailto haben. – svinto

Antwort

48

Sie wollen die :not selector

$("a:not([rel=facebox],[href^=mailto])"); 

EDIT: Ich habe Ihre Antwort auf Richtigkeit

+0

Da gehen wir - jetzt fühle ich mich besser, es als die akzeptierte Antwort auszuwählen. Sie hatten ursprünglich Recht mit dem: nicht Selektor, aber ich hatte meine Frage nicht richtig formuliert. –

+0

Frage zu dieser Antwort: Warum ist das^= benötigt? Heißt das nicht "nicht gleich", während du inzwischen schon geschrieben hast: "nicht?" – user1477388

+4

das^= bedeutet 'beginnt mit' –

3

Alles klar Herr Jeremy Ricketts. Jquery hat deinen Kopf vermasselt. Sie versuchen, die Selektorlogik zu verketten ... so wie jQuery Methoden kettet. In Ihrem zweiten Selektor (a[href!^="mailto"]) versuchen Sie zu sagen ... NICHT Dinge, die dieses Attribut enthalten. Was Sie sagen, ist "Suche nach allen Dingen, die nicht mailto sind" und "Suche nach allen Dingen, die mailto enthalten". Es ist wie Lichtfilter ... wenn du rotes Licht filtrierst ... und einen gelben Lichtfilter an die Spitze wirfst ... du filterst nicht nach orangem Licht ... du hast nur ALLES herausgefiltert (Entschuldigung für die Länge einer Analogie) . Was Sie also versuchen, ist der Pseudo Selektor: nicht.

Like this - $(a:not([href^=mailto:])).whateverJqueryMethodYouWant();

EDIT: Nun gut, dass Sie die Frage richtig geskilled aus haben ... Sie es so tun können - $(a:not([href^=mailto:] , [rel=facebox])).whateverJqueryFunctionYouWant();

0

Sollte es nicht sein:

Verwandte Themen