2013-08-10 30 views
19

Đang cố gắng để có được những yếu tố có thể nhìn thấy đầu tiên của một danh sách sử dụng jQuery :first:visible pseudo-selectors, như đề xuất ở đây: https://stackoverflow.com/a/830611/165673 nhưng nó không làm việc:Bắt yếu tố đầu tiên có thể nhìn thấy với 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'); 

Mục đầu tiên trong mỗi danh sách nên chuyển sang màu xanh ...

+0

có vẻ như được làm việc tốt ... nền của Mục A đã thay đổi –

+0

@ Arun- Nếu nó là làm việc sau đó nguồn gốc của mục A trong danh sách đầu tiên VÀ mục B trong danh sách thứ hai sẽ thay đổi – Yarin

Trả lời

40

Cố gắng sử dụng này:

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

Hiện nay mã của bạn là chỉ cần nhận được li yếu tố có thể nhìn thấy đầu tiên trên và thiết lập màu nền. Mã này chọn tất cả các thành phần ul sau đó tìm thấy đầu tiên có thể nhìn thấy li bên trong mỗi phần tử và áp dụng kiểu.

Ở đây nó đang làm việc: http://jsfiddle.net/FAY9q/5/

+0

@ Joe-Ugh, bạn đang phải-SLOPPY! – Yarin

+0

Mặc dù vậy, sử dụng '$ ('ul li: visible: first')' vẫn không hoạt động: http://jsfiddle.net/FAY9q/7/ (Mặc dù nó sử dụng '$ ('ul') .find ('li: visible: first') ') – Yarin

+0

@Yarin - đó sẽ là bởi vì nó vẫn chỉ tìm kiếm' li' đầu tiên trong 'ul'. Lý do '.find()' hoạt động là nó tìm thấy bộ chọn đã cho trong _each_ của các phần tử đã so khớp (trong trường hợp này là 'ul'). – Joe

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

Điều này không hoạt động: http://jsfiddle.net/FAY9q/8/ – Yarin

+0

Cảm ơn Yarin. Đó là sai lầm của tôi, tôi đã không tìm thấy. – Lab

0

gì về việc sử dụng này:

li:visible:not(:visible ~ :visible) 
Các vấn đề liên quan