2009-12-22 3 views
129

Ho alcuni collegamenti che voglio selezionare classe e id allo stesso tempo.jQuery: selezionare contemporaneamente la classe e l'ID di un elemento?

Questo perché ho 2 comportamenti diversi. Quando una classe di link ha un nome di classe, si comportano in un modo, quando gli stessi clas dei link hanno un altro nome di classe che si comportano in modo diverso. I nomi delle classi sono switch con jquery.

Quindi devo essere in grado di selezionare una classe di collegamenti AND id allo stesso tempo. È possibile?

ho provato:

$("a .save #country") 

, senza alcun risultato.

risposta

235

si può fare:

$("#country.save")... 

O

$("a#country.save")... 

O

$("a.save#country")... 

come si preferisce.

Quindi sì, è possibile specificare un selettore che deve corrispondere all'ID e alla classe (e potenzialmente il nome del tag e qualsiasi altra cosa si desideri inserire).

+23

Quindi in pratica è come: $ ("# a .b") significa elemento con classe b all'interno dell'elemento con id a. $ ("# a.b") significa elemento con classe b e id a. Il trucco è lo spazio tra #a e .b –

+8

Devi fare attenzione a usare il selettore di id prima della lezione altrimenti non funziona. Esempio: $ (". Save # country") ... non restituisce risultati. – slotomo

0

Come su questo codice?

$("a.save#country") 
+0

ho votato in fretta su questa risposta. Scusa ... – devundef

0
$("a.save, #country") 

selezionerà sia di classe "a.save" e "paese" id.

7

funzionerà quando si aggiunge spazio tra id e class identificatore

$("#countery .save")...

+1

in realtà questo ha funzionato per me, in quanto non funzionava come $ ('# countery.save') quindi grazie! – Nikola

+0

Ho scoperto che a volte è schizzinoso nello spazio. come $ (. selector> .item # id) funziona, ma $ (. selector> .item #id) non funziona. –

+14

Lo spazio è il * selettore discendente *, cioè "A B" significa "Abbina tutti gli elementi che corrispondono a B che sono un discendente di elementi che corrispondono ad A". 'AB' significa" seleziona tutti gli elementi che corrispondono a A e B ". Quindi dipende davvero da cosa vuoi ottenere. '# countery.save' e' #countery .save' non sono equivalenti. –

32

solo aggiungere che la risposta che Alex condizione ha lavorato per me, e non quello che viene evidenziato come una risposta.

Questo non ha funzionato per me

$('#country.save') 

Ma questo fatto:

$('#country .save') 

quindi la mia conclusione è quello di utilizzare lo spazio. Ora non so se si tratta della nuova versione di jQuery che sto usando (1.5.1), ma comunque spero che questo aiuti chiunque abbia problemi simili che ho avuto.

edit: Punteggio pieno per la spiegazione (nel commento alla risposta di Alex) va a Felix Kling che dice:

Lo spazio è il selettore discendente, cioè AB significa "Match tutti elementi che partita B che sono un discendente di elementi che corrispondono ad A ". AB significa "seleziona tutto l'elemento corrispondente a A e B". Quindi dipende davvero da cosa vuoi ottenere. #country.save e #country .save non sono equivalenti.

+2

Il problema è che hai detto "countery" anziché "country"? – amindfv

1

Alla fine si applicano le stesse regole di css.

Quindi penso che this reference potrebbe essere di qualche utilità.

+0

Potresti riassumere il contenuto del tuo riferimento? – krlmlr

+0

In realtà, secondo http://api.jquery.com/category/selectors/ jQuery ha alcuni selettori a parte; inoltre, in realtà non dice che tutti i selettori CSS 1-3 sono supportati ... – SamB

+0

@SamB Hai ragione ma, lo dice _borrows_ da CSS 1-3 AND aggiunge il suo. Continuo a pensare che il collegamento al materiale del W3C sia valido per questa discussione. – akousmata