2012-10-26 29 views
7

thể trùng lặp:
Combining jQuery :not and :nth-child selectorsjQuery - 2 bộ chọn giả?

có thể như vậy?

Đây là mã của tôi:

$("ul#filterlist li:nth-child(3n)").css("marginTop", "0"); 

Nếu tôi muốn áp dụng điều đó vào danh sách, nhưng chỉ cho những mục VISIBLE trong danh sách (một số được ẩn, tôi không muốn họ tính), làm thế nào nó sẽ đạt được? Tôi đã suy nghĩ một cái gì đó như:

$("ul#filterlist li:nth-child(3n)").not(":hidden").css("marginTop", "0"); 

Nhưng nó sẽ không hoạt động. Tôi sẽ không thử bất cứ điều gì với: hiển thị

Bất kỳ ý tưởng nào? Cảm ơn.

+0

Nó không phải là một bản sao của: không, như: không phải là không ngoài của dung dịch, người ta chỉ cách tôi nghĩ rằng nó sẽ hợp lý làm việc, trong đó nó không, cảm ơn – Phill

Trả lời

10

Phương pháp bạn đang tìm kiếm là filter(). Nó sẽ lọc ra một danh sách các đối tượng jQuery dựa trên bộ chọn đã cho. Vì không có bộ chọn "không :hidden" tôi có thể tìm thấy, tôi đã sử dụng đối diện :visible.

$("ul#filterlist li:nth-child(3n)").filter(":visible").css("marginTop", "0"); 

Hy vọng điều này sẽ hữu ích!

1

thử chaining các: selectors

$("ul#filterlist li:nth-child(3n):not(:hidden)").css("marginTop", "0"); 

như thể hiện trong câu trả lời này:

jQuery - multiple :not selector

+0

Nếu đó là ': not: hidden', nó phải là': visible'. Hiển thị – alex

+0

cũng có thể là: thu gọn, mặc dù hoạt động như bị ẩn khi được sử dụng trên các phần tử không phải bảng – WebChemist

+0

một mẫu khác $ ("# divdetails span: nth-child (2): contains ('s')") –

2

Nếu bạn không muốn đếm các yếu tố ẩn bạn có thể thử sử dụng đoạn mã sau.

$("ul#filterlist li:visible").filter(function(index){ 
    return (index+1)%3 == 0?true:false; 
}).css("marginTop", "0"); 

xem ví dụ trong jsfiddle here