2010-05-06 9 views
5

J'utilise actuellement ce code pour ajouter une classe à chaque autre ligne de ma table.Sélectionnez toutes les 2 lignes de table avec jquery

$(".stripeMe tr:even").addClass("alt"); 

Cependant, sur une autre table, je voudrais ajouter une classe aux lignes 3,4, 7,8, 11,12 et ainsi de suite ...

Est-ce possible?

+0

pls fournissent un extraits de structure de la table! –

+2

sa simple structure de la table:

Mark

Répondre

8

Vous devez le faire comme ceci:

$(".stripeMe tr:nth-child(4n)").add(".stripeMe tr:nth-child(4n-1)").addClass("alt");​​​​​​​​ 
//or... 
$("tr:nth-child(4n), tr:nth-child(4n-1)", ".stripeMe").addClass("alt");​​​​​​​​​​​​​​​​​ 

You can see this working here.

En utilisant ceci:

$(".stripeMe tr:nth-child(4n), .stripeMe tr:nth-child(4n-1)").addClass("alt");​​​​​​​​ 

gets different results (à savoir dans WebKit, peut-être d'autres).

+0

Cela a fonctionné pour moi, merci beaucoup. – Mark

+0

Comment puis-je appliquer une classe css différente aux 2 premières lignes seulement maintenant? Merci d'avance! – Mark

+0

@Mark - Si vous voulez dire seulement le ** très ** premier 2, alors comme ceci: '$ (". StripeMe tr: lt (2) "). AddClass (" otherClass ");' –

3

Avec le `: sélecteur nième child': http://api.jquery.com/nth-child-selector/

$(".stripeMe tr:nth-child(4n), .stripeMe tr:nth-child(4n-1)").addClass("alt"); 
+0

Cela ne fonctionne pas :) http://jsfiddle.net/ndn67/ –

+0

Votre exemple fonctionne bien pour moi ... – RoToRa

+0

@RoToRa - Ope n il dans webkit :) –

1

Vous pouvez utiliser la fonction filter pour filtrer l'ensemble comme vous le souhaitez:

$(".stripeMe tr") 
.filter(function(i){ return (i % 4) >= 2; }) 
.addClass("alt"); 

Cela permet de garder les éléments avec l'index 2, 3, 6, 7, 10, 11 et ainsi de suite. Notez que l'index est basé sur zéro, donc la troisième ligne comme index deux.

1

J'ai fait une approche différente pour ce problème en utilisant une méthode for loop et .eq().

var a = 2; // start from 2 because eq() counts from 0 
var b = 3; // start from 3 because eq() counts from 0 
var total = $('.stripeMe td').length; 

for (i = 0; i <= total; i++){ 
    if (i == a){ 
     $('.stripeMe tr:eq('+a+')').css('background', 'red'); 
     a+=4; 
    } 
    else if (i == b){ 
     $('.stripeMe tr:eq('+b+')').css('background', 'blue'); 
     b+=4; 
    } 
}; 

Questions connexes