2009-03-02 19 views
19

Próba złożenia tutaj dość skomplikowanego selektora jQuery i problemów.pytanie selektora jQuery. Wybierz wszystkie węzły, które NIE zaczynają się od (ciąg)

Zasadniczo, próbuję złapać wszystkie kotwice, że 1) nie mają „rel” z „Facebox” i LUB 2) nie mają „href”, który zaczyna się od „mailto ".

To, co starałem się zrobić:

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

Małe wariacje to nie wydają się działać. Czy jest jakiś lepszy sposób na zrobienie tego?

Te przełączniki wydają się działać indywidualnie, ale nie wtedy, gdy siedzi się kolejno w tym samym selektora:

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

roztworu końcowego: Mamy zwycięzcę!

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

Co ciekawe, $ ("a: not ([rel = facebox]") i $ ("a: not ([href^= mailto]") działają dobrze, ale nie oba oddzielone przecinkami. –

+0

To dlatego, że przecinki dodają obiekt po nim do obiektu jQuery, efektywnie dobierając wszystkie z wyjątkiem Węzły, które mają zarówno rel = facebox, jak i href z mailto. – svinto

Odpowiedz

48

Chcesz :not selector

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

EDIT: Wygrałem swoją odpowiedź na poprawność

+0

No to idziemy - teraz czuję się lepiej, wybierając go jako zaakceptowaną odpowiedź. Miałeś rację co do: nie selektor pierwotnie, ale nie sformułowałem poprawnie mojego pytania. –

+0

Pytanie dotyczące tej odpowiedzi: Dlaczego^= jest potrzebne? Czy to nie oznacza "nie jest równy", podczas gdy Ty już napisałeś ": nie?" – user1477388

+4

the^= oznacza 'zaczyna się od' –

3

Dobrze Pan Jeremy Ricketts. Jquery zawalił ci głowę. Próbujesz łączyć logikę selektora ... jak np. Metody łańcuchów jQuery. W drugim selektorze (a[href!^="mailto"]) próbujesz powiedzieć ... NIE rzeczy, które zawierają TEN atrybut. Mówisz: "Wyszukaj wszystkie rzeczy, które nie są mailto" i "Wyszukaj wszystkie rzeczy, które zawierają mailto". To jak filtry światła ... jeśli filtrujesz czerwone światło ... i kładziesz na górze żółty filtr światła ... nie filtrujesz pomarańczowego światła ... po prostu odfiltrowałeś WSZYSTKO (przepraszam za odcinek analogii) . Więc próbujesz użyć pseudo selektora: nie.

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

EDIT: Więc teraz, że masz spec''d na pytanie poprawnie ... możesz zrobić to w ten sposób - $(a:not([href^=mailto:] , [rel=facebox])).whateverJqueryFunctionYouWant();

0

Nie powinno być:

$("a:not([rel='facebox'],[href^='mailto'])"); 
Powiązane problemy