2009-04-16 14 views
1

Das ist vielleicht schwer zu erklären, aber ich brauche eine Möglichkeit, eine Reihe von Elementen durchzugehen, die ich bereits ausgewählt habe und für jede Klasse zu finden, die mit dem Wort " Symbol". So zum Beispiel habe ich die folgenden Elemente SoWie man Klassen auswählt, die mit einer bestimmten Zeichenkette beginnen

<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> 

haben könnte, beginne ich mit der Auswahl der Elemente und Looping durch sie ....

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

}); 

Nun konnte ich den folgenden Code in der Schleife setzen ...

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

} 

würde ich dann, dass für jedes mögliche Symbol wiederholen müssen, was sehr ineffizient zu sein scheint.

Was ich in der "each" -Schleife tun möchte, ist nur Zyklus durch alle Klassen, die $ (this) hat und wählen Sie die, die mit ICON beginnt und verwenden Sie dann, um das Bild anzuhängen.

Kann jemand helfen?

+2

Können Sie nicht einfach eine Klasse von "Symbol" auf alle Elemente anwenden, die eine Symbol-bezogene Klasse haben und dann davon arbeiten? –

Antwort

0

Für jedes Element, um den Wert des Klassenattribut erhalten, teilen Sie es durch ‚‘, nehmen die zweiter Teil und rufen Sie das Bild auf.

Von der Spitze von meinem Kopf

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

Nicht ganz sicher der Syntax, wenig eingerostet!

+0

Das ist der, nach dem ich gesucht habe. – jonhobbs

0

Versuchen Sie diesen Selektor:

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

Diese nur Elemente auswählen sollten, die die Klasse Taste haben, und haben auch eine Klasse, die mit ‚Symbol‘ starten.

Natürlich setzt dieser Selektor auch voraus, dass Ihre CSS-Klasse immer zuerst mit "button" beginnt und nicht mit "icon".

+0

Ich habe bereits einen Selektor für die Auswahl von Tasten, die ein Symbol haben. Das harte Bit gibt an, welches Symbol die Schaltfläche hat, ohne eine .hasClass() für jedes andere mögliche Symbol zu verwenden. – jonhobbs

2

Ich empfehle gegen die Verwendung von Klassen, wenn Sie die Klasse nicht mit dem Bild verknüpfen. (welches wäre der korrekteste Weg) Was ich stattdessen tun würde, ist eine Verknüpfung zu dem Bild in der Rel-Tag.

Dies tut, was Sie wollen, und wird immer noch als gültig CSS validieren.

<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> 

das Beispiel hier ansehen: http://jsbin.com/acasu

Hinweis, wenn Sie viele kleinen Bilder verwenden, die Sie verwenden CSS Sprites wollen gehen. Dadurch wird die Leistung Ihrer Seite erheblich verbessert.

Wenn Sie absolute musste es tun, wie Sie vorschlagen, können Sie folgendes tun:

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

Das mag eine mögliche Lösung für dieses spezielle Problem sein, aber wenn ich das gleiche mehr als einmal machen will, werde ich keine Tags mehr haben.Ich würde es vorziehen, einen effizienteren Weg zu finden, um zu der Klasse zu gelangen, die mit "icon" beginnt. – jonhobbs

+0

Ich bin mir nicht sicher, was Sie meinen, keine Tags mehr. Keine Klassen mehr? Attribute? – cgp

+0

Sorry, ich meinte Attribute. Es kann nur ein rel-Attribut geben. – jonhobbs

Verwandte Themen