2013-08-10 16 views
19

Cercando di ottenere il primo elemento visibile di un elenco utilizzando :first e :visible pseudo-selettori di jQuery, come suggerito qui: https://stackoverflow.com/a/830611/165673 ma non funziona:Ottenere primo elemento visibile con jQuery

Fiddle:http://jsfiddle.net/FAY9q/4/

HTML:

<ul> 
    <li>Item A</li> 
    <li>Item B</li> 
    <li>Item C</li> 
</ul> 
<ul> 
    <li style="display:none;">Item A</li> 
    <li>Item B</li> 
    <li>Item C</li> 
</ul> 

JQuery:

$('li:visible:first').css('background','blue'); 

La prima voce in ogni lista dovrebbe diventare blu ...

+0

sembra funzionare bene ... sfondo della voce A è cambiato –

+0

@ Arun- Se fosse lavorando quindi gli sfondi dell'articolo A nella prima lista E l'articolo B nella seconda lista cambierebbe – Yarin

risposta

40

provare a utilizzare questo:

$('ul').find('li:visible:first').css('background','blue'); 

Attualmente il codice è appena il primo visibile li elemento sul pagina e impostazione del colore di sfondo. Questo codice seleziona tutti gli elementi ul quindi trova il primo li visibile all'interno di ciascuno di essi e applica lo stile.

Qui si sta lavorando: http://jsfiddle.net/FAY9q/5/

+0

@ Joe-Ugh, hai ragione- SLOPPY! – Yarin

+0

Stranamente però, usando '$ ('ul li: visible: first')' continua a non funzionare: http://jsfiddle.net/FAY9q/7/ (Anche se lo fa quando usi '$ ('ul') .find ('li: visible: first') ') – Yarin

+0

@Yarin - sarà perché sta ancora cercando il primo' li' visibile all'interno di un 'ul'. La ragione per cui '.find()' funziona è che trova il selettore dato all'interno di _each_ degli elementi corrispondenti (in questo caso 'ul's). – Joe

-2
$('li:visible').eq(0).css('background','blue'); 
+0

Questo non funziona: http://jsfiddle.net/FAY9q/8/ – Yarin

+0

Grazie Yarin. E 'stato un mio errore, non ho messo il find. – Lab

0

Cosa succede ad usare questo:

li:visible:not(:visible ~ :visible) 
Problemi correlati