UPDATE: I don't think this is possible with nth-child or another jQuery selector. therefore, consider using a more detailed solution:
var count = 0; $('.select-all-these').each(function() { if(!$(this).hasClass('except-these')) { count++; } if(count === 3) { $(this).text('every 3rd element'); count = 0 } });β
http://jsfiddle.net/TJdFS/2/ (alternative version: http://jsfiddle.net/TJdFS/ )
: nth-child counts all matching elements, ignoring any additional filters, such as: not.
see jquery doc:
The nth-child (n) pseudo-class is easily confused with: eq (n), although the two can lead to completely different matched elements. Using nth-child (n), all child elements are taken into account, regardless of whether they are, and the specified element is selected only if it matches the selector attached to the pseudo-class. With the help of: eq (n), only the selector attached to the pseudo-class, not limited to the children of any other element, is calculated, and the (n + 1) -th one (n is the 0-base) is selected.
Example:
<div class="select-all-these">1</div> <div class="select-all-these except-these">2</div> <div class="select-all-these except-these">3</div> <div class="select-all-these">4</div> <div class="select-all-these except-these">5</div> <div class="select-all-these">6</div>
JS:
$('.select-all-these:not(.except-these):nth-child(6)').text('nth-child counts all elements (1 based!)'); $('.select-all-these:not(.except-these):eq(1)').text('eq counts only matching elements (0 based!)');
Result:
1 2 3 eq counts only matching elements. (0 based!) 5 nth-child counts all elements (1 based!)
http://jsfiddle.net/nFtkE/2/
Felix ebert
source share