2013-08-10 7 views
19

Próbując zdobyć pierwszy widoczny element listy za pomocą :first i :visible pseudo-selektorów jQuery, tak jak sugeruje tutaj: https://stackoverflow.com/a/830611/165673 ale to nie działa:Pierwsze pierwszy widoczny element z 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'); 

Pierwsza pozycja w każdej listy należy włączyć niebieski ...

+0

wydaje się działać dobrze ... tło elementu A zmieniła –

+0

@ Arun- Gdyby było działające wtedy tło elementu A na pierwszej liście I pozycja B na drugiej liście zmieni się – Yarin

Odpowiedz

40

Spróbuj użyć tego:

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

Obecnie kod jest po prostu coraz pierwszy widoczny element na li stronę i ustawienie koloru tła. Ten kod wybiera wszystkie elementy ul, a następnie znajduje pierwszy widoczny obiekt w każdym z nich i stosuje ten styl.

Tu pracuje: http://jsfiddle.net/FAY9q/5/

+0

@ Jo-Ugh, masz rację - SLOPPY! – Yarin

+0

Co dziwne, używanie '$ ('ul li: visible: first')' nadal nie działa: http://jsfiddle.net/FAY9q/7/ (Chociaż robi to podczas używania '$ ('ul') .find ('li: visible: first') ') – Yarin

+0

@Yarin - to będzie dlatego, że wciąż szuka tylko pierwszego widocznego' li' w 'ul'. Przyczyną działania '.find()' jest znalezienie podanego selektora w _leach_ z dopasowanych elementów (w tym przypadku 'ul's). – Joe

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

To nie działa: http://jsfiddle.net/FAY9q/8/ – Yarin

+0

Dzięki Yarin. To był mój błąd, nie znalazłem. – Lab

0

Co na temat korzystania z tego:

li:visible:not(:visible ~ :visible)