2009-04-16 5 views
1

Cela peut être difficile à expliquer, mais j'ai besoin d'un moyen de faire défiler un tas d'éléments que j'ai déjà sélectionnés et pour chacun trouver des classes qui commencent par le mot " icône". Ainsi, par exemple, je pourrais avoir les éléments suivantsComment choisir les classes qui commencent par une chaîne particulière

<div class="button iconStar"></div> 
<div class="button iconPlus"></div> 
<div class="button iconLeft"></div> 
<div class="button iconRight"></div> 
<div class="button iconUp"></div> 
<div class="button iconDown"></div> 

Alors, je commence par la sélection des éléments et en boucle à travers eux ....

$(".button").each(function(){ 
    // Some code here 

}); 

Maintenant, je pourrais mettre le code suivant dans la boucle ...

if ($(this).hasClass("iconStar")){ 
    $(this).append("<IMG SRC='Images/star.gif'>"); 

} 

Je devrais alors répéter cela pour chaque icône possible, ce qui semble très inefficace. Ce que je voudrais faire dans la boucle "each" est de parcourir toutes les classes $ (this) et de choisir celle qui commence par ICON, puis de l'utiliser pour ajouter l'image.

Quelqu'un peut-il aider?

+2

Ne pouvez-vous pas simplement appliquer une classe d '«icône» à tous les éléments qui ont une classe liée à une icône, puis travailler à partir de cela? –

Répondre

0

Pour chaque élément, obtenir la valeur de l'attribut de classe, divisée par « », prendre la deuxième partie et appeler l'image.

Du haut de ma tête

$(".button[class^='button icon']").each(function(el){ 
classStr = el.className; 
classes = classStr.split(' '); 
image = 'images/' + classes[1] + '.jpg'; 
}); 

Pas tout à fait sûr de la syntaxe, peu rouillé!

+0

C'est celui que je cherchais. – jonhobbs

0

Essayez d'utiliser ce sélecteur:

$(".button[class^='button icon']") 

Cela devrait sélectionner uniquement les éléments qui ont le bouton de classe, et ont également une classe qui commencent par « icône ».

Bien sûr, ce sélecteur suppose également que votre classe CSS commence toujours par "bouton" d'abord et non "icône".

+0

J'ai déjà un sélecteur pour choisir les boutons qui ont une icône. Le bit dur identifie l'icône du bouton sans utiliser .hasClass() pour chaque icône possible différente. – jonhobbs

2

Je déconseille d'utiliser des classes si vous n'allez pas associer la classe à l'image. (qui serait la manière la plus correcte) Ce que je ferais à la place est de mettre un lien vers l'image dans la balise rel.

Cela fait ce que vous voulez, et validera toujours comme css valide.

<div class="button" rel="images/star.jpg">iconStar</div> 
<div class="button" rel="images/plus.jpg">iconPlus</div> 
<div class="button" rel="images/left.jpg">iconLeft</div> 
<div class="button" rel="images/right.jpg">iconRight</div> 
<div class="button" rel="images/up.jpg">iconUp</div> 
<div class="button" rel="images/down.jpg">iconDown</div> 
<script> 
$('.button').each(function() { 
    $(this).append("<img src='"+$(this).attr('rel')+"'>"); 
}); 
</script> 

Voir l'exemple ici: http://jsbin.com/acasu

Remarque, si vous utilisez beaucoup de petites images, vous allez vouloir utiliser CSS Sprites. Comme cela va grandement améliorer les performances de votre page.

Si vous absolu fallait le faire la façon dont vous suggérez, vous pouvez effectuer les opérations suivantes:

$(".button[class^='button icon']").each(function() { 
    var iconSrc = $(this).attr('class').substr("button icon".length) 
    $(this).append("<img src='/images/"+iconSrc+".jpg'>"); 
}); 
+0

Cela peut être une solution possible pour ce problème particulier, mais si je veux faire la même chose plus d'une fois, je vais manquer de tags.Je préférerais trouver un moyen plus efficace d'obtenir à la classe qui commence par «icône» – jonhobbs

+0

Je ne suis pas sûr de ce que vous voulez dire, à court de balises. À court de cours? Les attributs? – cgp

+0

Désolé, je voulais dire des attributs. Il ne peut y avoir qu'un seul attribut rel. – jonhobbs

Questions connexes