I wouldn't use either version. Instead, I would change your CSS from:
tr.rowodd { background-color: #FFF; } tr.roweven { background-color: #F2F2F2; } to: tr { background-color: #FFF; } tr.roweven { background-color: #F2F2F2; } and then use just one line of jQuery code: $('#foobar tr:visible:odd').addClass('roweven'); Now you're doing only half the work and letting the CSS cacading rules take care of the rest. -Mike On Fri, Jan 1, 2010 at 10:38 AM, Paul Kim <kimba...@gmail.com> wrote: > Thanks for your reply. Your solution works. I had a feeling that :even and > :odd filters are zero-based, but found that to be "odd" in this situation. > So now that I have 2 ways to stripe visible table rows using jQuery, which > solution do you prefer? > > $('#foobar tbody tr:visible:even').addClass('rowodd'); > $('#foobar tbody tr:visible:odd').addClass('roweven'); > > or > > $('#foobar tbody tr:visible').each(function(i) { > if ((i+1) % 2 === 0) { > $(this).addClass('roweven'); > } > else { > $(this).addClass('rowodd'); > } > }); > > I guess both solutions work so it really doesn't matter, but which method > would you choose? The first solution contains less code but the second > solution seems more intuitive. > > > > 2010/1/1 Šime Vidas <sime.vi...@gmail.com> > > Also, you really don't need two counters (i and j).... >> >> var rows = $('#foobar tbody tr:visible'); >> for (var i = 0; i < rows.length; i++){ >> if ((i + 1) % 2 == 0) { >> rows.eq(i).addClass('roweven'); >> } >> else { >> rows.eq(i).addClass('rowodd'); >> } >> } >> >> However, don't use the for loop, you have jQuery's each method... >> >> $('#foobar tbody tr:visible').each(function(i) { >> if ((i+1) % 2 === 0) { >> $(this).addClass('roweven'); >> } >> else { >> $(this).addClass('rowodd'); >> } >> }); >> > >