2011-06-08 16 views
7

In CSS (qualsiasi versione), c'è qualcosa di simile, o qualsiasi altro modo di fare qualcosa come il selettore :has() in jQuery?I CSS hanno qualcosa come jQuery: ha()?

jQuery(':has(selector)')

Descrizione: Seleziona elementi che contenere almeno un elemento che corrisponde il selettore specificato.

http://api.jquery.com/has-selector/

+0

cosa vuoi chiedere nel selettore has()? – mightyplow

+0

Non è solo un normale selettore di bambini? Le regole in un selettore verranno applicate a tutti gli elementi corrispondenti. – andyb

+1

@andyb: ': has()' è una pseudo-classe condizionale, simile a ': not()'. Gli elementi abbinati sono i selettori attorno alla pseudo-classe, non tra parentesi. – BoltClock

risposta

6

No, non c'è. Il modo in cui il CSS è progettato, non consente i selettori che corrispondono agli antenati o ai fratelli precedenti; solo discendenti ( e >), fratelli successivi (~ e +) o figli specifici (:*-child). L'unico selettore di antenati è la pseudo-classe :root che seleziona l'elemento radice di un documento (nelle pagine HTML, naturalmente, sarebbe html).

Se è necessario applicare gli stili all'elemento su cui si sta eseguendo la query con :has(), è necessario aggiungere una classe CSS e quindi lo stile di tale classe, as suggested by Stargazer712.

+1

Le bozze di Selectors 4 menzionano un selettore di soggetto che, sebbene abbia una semantica diversa dal selettore ': has()' di jQuery, funzionerebbe altrettanto bene in questo caso se viene standardizzato e implementato. – BoltClock

5

No. Il modo migliore per raggiungere questo obiettivo è quello di utilizzare jQuery:

Css File:

.myAwesomeClass { 
    ... 
} 

Js File:

jQuery(':has(selector)').addClass("myAwesomeClass") 

dove selector è qualunque cosa è che sono stati originariamente cercando di eguagliare

+2

Il modo migliore sarebbe organizzare il CSS e il markup per rendere inutile fare affidamento su JavaScript, anche se a volte il CSS è un po 'un dolore. –

Problemi correlati