2011-08-16 12 views
5

Ho bisogno di un selettore CSS che seleziona un elemento <select> se contiene uno <option> che contiene o equivale (entrambi corrispondono ai miei requisiti) un testo specificato. Esempio HTML:Selettore CSS per trovare <select> con l'etichetta <option> specificata

<select name="foo"> 
    <option value="1">First</option> 
    <option value="2">Second</option> 
</select> 

voglio il <select> se contiene ad esempio un opzione "Seconda". Qualcosa di simile a questo:

select[option:contains('Second')] 

Se non v'è alcun modo per raggiungere questo obiettivo con selettori CSS, mi piacerebbe anche accettare JQuery o XPath selettori.

+2

Cosa vuoi fare con l'elemento? I browser sono molto limitati quando si tratta di disegnare gli elementi 'SELECT'. –

+0

Desidero combinare questo approccio con i metodi Selenium per trovare automaticamente gli elementi del modulo con cui interagire. – Alp

risposta

8

Non è possibile farlo con i CSS.

È possibile utilizzare questo selettore jQuery (:has() e :contains() non sono parte di CSS):

$("select:has(option:contains('Second'))") 

O questa espressione XPath:

//select[contains(option, 'Second')] 
+0

grazie per la risposta completa e semplice – Alp

+0

contiene le corrispondenze di una stringa secondaria sfortunatamente. Devo corrispondere esattamente al valore – ladieu

+0

@ladieu: '// seleziona [opzione = 'Secondo']' Se stai usando jQuery devi scrivere manualmente un callback per testare il valore. – BoltClock

3
$('select[name="foo"] option:contains("Second")').parent().addClass('selected'); 

Forse questo può aiutare

2

Il modo più semplice per farlo è utilizzare il selettore sull'opzione

$("select option:contains('Second')") 

Ecco un esempio di lavoro: http://jsfiddle.net/8Tn4Z/

e una versione con il valore non attributo incluso: http://jsfiddle.net/8Tn4Z/1/

Per ottenere l'elemento di selezione vera e propria si può semplicemente utilizzare il metodo parent() su il codice di cui sopra in modo che:

var selectElement = $("select option:contains('Second')").parent(); 

Ecco un esempio: http://jsfiddle.net/8Tn4Z/2/

+0

È necessario selezionare * -tasto- * 'seleziona'. – BoltClock

+0

Grazie Daniel! Accidenti! –