2009-03-02 15 views
19

Cercando di assemblare un selettore jQuery piuttosto complesso qui, e avendo problemi.domanda selettore jQuery. Seleziona tutti i nodi che NON INIZIANO con (stringa)

In sostanza, sto cercando di afferrare tutte le ancore che che 1) non hanno un "rel" di "Facebox", e O 2) non hanno un "href" che inizia con "mailto ".

Questo è quello che ho cercato di fare:

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

Piccole variazioni di questo non sembrano funzionare. C'è un modo migliore di fare questo?

Questi selettori sembra funzionare singolarmente, ma non quando si è seduti consecutivamente nello stesso selettore:

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

soluzione finale: Abbiamo un vincitore!

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

Stranamente, $ ('a: not ([rel = facebox]') e $ ('a: not ([href^= mailto]') funzionano bene, ma non entrambi separati da una virgola. –

+0

Questo perché le virgole aggiungono l'oggetto dopo di esso all'oggetto jQuery, selezionando virtualmente tutti tranne t e nodi che ha sia rel = facebox che href con mailto. – svinto

risposta

48

si desidera che l'EDIT :not selector

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

: Ho guadagnato la tua risposta per la correttezza

+0

Ci siamo, ora mi sento meglio selezionandolo come risposta accettata. Avevi ragione sul: non sul selettore in origine, ma non avevo formulato correttamente la mia domanda. –

+0

Domanda su questa risposta: Perché il^= è necessario? Non significa "non è uguale" mentre intanto hai già scritto ": no?" – user1477388

+4

il^= significa 'inizia con' –

3

Va bene signor Jeremy Ricketts. Jquery ti ha incasinato la testa. Stai cercando di concatenare la logica del selettore ... un po 'come il modo in cui jQuery concatena i metodi. Nel tuo secondo selettore (a[href!^="mailto"]) stai provando a dire ... NON cose che contengono questo attributo. Quello che stai dicendo è "Cerca tutte le cose che non sono mailto" e "Cerca tutte le cose che contengono mailto". È come i filtri di luce ... se filtri la luce rossa ... e getti un filtro giallo sulla parte superiore ... non stai filtrando per la luce arancione ... hai appena filtrato TUTTO (scusa per il tratto di un'analogia) . Quindi quello che stai cercando di fare è usare lo pseudo-selettore: no.

Ti piace questa - $(a:not([href^=mailto:])).whateverJqueryMethodYouWant();

EDIT: Bene ora che avete spec la domanda correttamente ... si può fare in questo modo - $(a:not([href^=mailto:] , [rel=facebox])).whateverJqueryFunctionYouWant();

0

Non dovrebbe essere:

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