2012-10-26 20 views
7

Powiel możliwe:
Combining jQuery :not and :nth-child selectorsjQuery - 2 pseudo selektory?

jest to możliwe?

Oto mój kod:

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

Gdybym chciał zastosować że do listy, ale tylko do tych elementów widocznych na liście (niektóre dostać ukryte, nie chcę im liczone), jak czy zostałby osiągnięty? Pomyślałem coś takiego:

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

Ale to nie zadziała. Ani nic, z czym spróbuję: widoczne

Jakieś pomysły? Dzięki.

+0

To nie jest duplikat: nie, ponieważ: nie było nie od siebie rozwiązania, to było po prostu tak myślałem, że logicznie pracy, w którym nie, dziękuję – Phill

Odpowiedz

10

Metoda, której szukasz, to filter(). Spowoduje to odfiltrowanie listy obiektów jQuery na podstawie podanego selektora. Ponieważ nie mogłem znaleźć "wybieracza", który nie byłby ":hidden", użyłem odwrotnego :visible.

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

Mam nadzieję, że to pomoże!

1

spróbować łańcuchowym: Selektory

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

jak pokazane w tej odpowiedzi:

jQuery - multiple :not selector

+0

Jeśli jest to ': not: hidden', musi to być': visible'. – alex

+0

widoczność może również być: zwinięcie, chociaż działa ona jak ukryta, gdy jest używana na elementach innych niż tabelowe – WebChemist

+0

kolejna próbka $ ("# divdetails span: nth-child (2): contains ('s')") –

2

Jeśli nie chcesz liczyć ukryte elementy można spróbować użyć następującego kodu.

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

patrz przykład w jsfiddle here