tags:

views:

71

answers:

3

I have a jQuery selector like the following:

$('.someClass div div .specificChildClass:nth-child(even)').addClass('alternateLine');

This stripes just as I want it to UNLESS there's a hidden element. I need the selector to take hidden elements into account and NOT factor them in to the striping. This way, the visible elements are striped properly on the page.

I tried changing my selector to this:

$('.someClass div div .specificChildClass:visible:nth-child(even)').addClass('alternateLine');

and then:

$('.someClass div div .specificChildClass:not(.hiddenClass):nth-child(even)').addClass('alternateLine');

Is there an easy solution to this? I know I can iterate through a .each loop with an iterator and check each, mod the iterator to decide odd or even, but I thought there was probably a better way.

A: 

Try :even -

$('.someClass div div .specificChildClass:visible:even')
  .addClass('alternateLine');

nth-child refers to DOM structure, this isn't what you're looking for.

Kobi
Exactly what I was looking for. I assumed nth-child was using the DOM structure after I saw the results, just wasn't sure how to fix that. Thanks!
DougJones
A: 

Try something like this:

    $('.someClass div div .specificChildClass:visible:nth-child(even)')
    .filter(function(i) {
           $(this).is(':visible').addClass('alternateLine');
    });

Hope that helps.

Keir
A: 

use :not(:hidden) $('.someClass div div .specificChildClass:not(:hidden):even').addClass('alternateLine');

Tom Brothers