2013-01-28 6 views
1

J'ai créé une liste et j'essaie d'ajouter un nom de classe différent à chacun d'eux. À l'heure actuelle, j'utilise cette méthode:Ajout de classes différentes à chaque élément de liste

HTML:

<ul class="sd-list"> 
    <li><a href="#">List Item 1</a></li> 
    <li><a href="#">List Item 2</a></li> 
    <li><a href="#">List Item 3</a></li> 
</ul> 

jQuery:

$('.sd-list:nth-child(1)').addClass('green'); 
$('.sd-list:nth-child(2)').addClass('red'); 
$('.sd-list:nth-child(3)').addClass('purple'); 

Cela fonctionne très bien, mais je me demande s'il y a une meilleure méthode que celle que je suis en train d'utiliser. Toute aide serait grandement appréciée.

+0

qui est terriblement vague ... est-il une logique à ce que la classe est donnée à quel élément de la liste? –

+0

Il semble que vous ajoutiez des classes de style (par opposition aux classes sémantiques). Si le but est de les styliser, pourquoi ne pas avoir des sélecteurs dans votre fichier CSS? par exemple. '.sd-list> li: premier-enfant', etc. –

Répondre

4

Vous pouvez mettre les classes dans un tableau:

var colors = ['green', 'red', 'purple']; 

$('.sd-list').each(function() { 
    var index = $(this).index(); 
    if (index < colors.length) { 
     $(this).addClass(colors[index]); 
    } 
}); 

Si les listes sont tous les enfants du même parent et que vous avez utilisé :nth-child(X) pour obtenir l'élément à la position X (au lieu de vraiment utiliser comme « l'enfant n-ième des parents »), et vous avez une classe pour chaque position, vous pouvez également simplifier à:

$('.sd-list').addClass(function(index) { 
    return colors[index]; 
}); 

Mais je suis d'accord avec Vlad, vous pouvez facilement écrire ceci directement en CSS:

.sd-list:nth-child(1) { 
    /* rules */ 
} 
/* etc */ 
+0

Merci. Et oui ... mon premier coup était avec CSS, mais depuis que je suis nul à jQuery, j'ai pensé que je pouvais essayer. Merci Felix pour ton temps et ton aide. – jfrosty

1
$(function() { 

     $(".sd-list li").each(function(index) { 
      $(this).attr("class", "color" + index); 
     }); 

}); 
Questions connexes