Doing odd/even styling with jQuery is pretty easy:
$(function() { $('.oddeven tbody tr:odd').addClass('odd'); $('.oddeven tbody tr:even').addClass('even'); });
Now I came across an interesitng problem today. What if you want to style alternating groups of elements? For example, alternating blocks of 3. Longhand this can be done this way:
$(function() { $('.oddeven3 tbody tr:nth-child(3n+1)').addClass('odd'); $('.oddeven3 tbody tr:nth-child(3n+2)').addClass('odd'); $('.oddeven3 tbody tr:nth-child(3n+3)').addClass('odd'); $('.oddeven3 tbody tr:nth-child(3n+4)').addClass('even'); $('.oddeven3 tbody tr:nth-child(3n+5)').addClass('even'); $('.oddeven3 tbody tr:nth-child(3n+6)').addClass('even'); });
Seems a bit longwinded though. Now it can be somewhat simplified and made generic like this:
function oddEvenGroupStyle(groupSize) { for (var i=1; i<=groupSize; i++) { $('.oddeven' + groupSize + ' tbody tr:nth-child(' + groupSize + 'n+' + i + ')').addClass('odd'); $('.oddeven' + groupSize + ' tbody tr:nth-child(' + groupSize + 'n+' + (groupSize+i) ' + ')').addClass('even'); } }
and:
$(function() { oddEvenGroupStyle(3); });
Seems like a bit of a hack to me though. Is there some more jQuery-ish way of selecting the right rows?
1 Answer