2010-04-19 3 views

Antwort

16

Vorsicht mit $('#dialog li[class^="C"]')! Es werden nur Elemente abgeglichen, deren Klassenattribut mit "C" beginnt, nicht mit einer Klasse, die mit C beginnt. Zum Beispiel stimmt es nicht mit <li class="foo Clown"> überein.

AFAIK was Sie wollen ist nicht möglich mit jQuery allein. Sie müssten die Klassen durchlaufen und jeden einzeln überprüfen. So etwas wie:

Alternativ sollten Sie Ihren Ansatz ändern, und geben Sie allen Elementen eine zusätzliche Klasse und filtern Sie damit. Dies hat den Vorteil, dass es auch in CSS verwendet werden kann:

<li class="Clown Clown-Funny"> 
<li class="Clown Clown-Sad"> 
<li class="Clown Clown-Rodeo"> 
+0

Danke! Ausgezeichneter Ansatz! – ktMen

+0

Danke. Habe gerade einen Fehler gesehen, den ich korrigieren werde. Ich hätte Filter nicht jeden benutzen sollen. – RoToRa

+2

Es ist möglich in jQuery wie folgt: $ ("div [Klasse^= 'Clown -'], div [Klasse * = 'Clown-']") – Cojones

4

Versuchen Sie die Attribute Starts With Selector. Als Bonus gibt es keine Notwendigkeit für das Extra, wenn.

$('#dialog li[class^="C"]').each(function() { 
    // do something 
}); 
+0

Während dies für die meisten Leute in Ordnung ist, wird es niemandem helfen, der überprüfen möchte, ob eine bestehende Menge von Elementen eine Klasse hat, die mit einem char beginnt. – ProblemsOfSumit

0

Probieren Sie etwas wie $('#dialog li[class^="C"]')

+1

Die inneren Anführungszeichen sind unnötig: '$ ('# dialog li [class^= C]')' funktioniert auch. – Tomalak

+0

@Tomalak - Die jQuery-Dokumente haben sie, aber das ist gut zu wissen! – justkt

+0

@justkt: Sofern Sie in der Zeichenfolge, nach der Sie suchen (oder irgendetwas anderes, das einen syntaktischen Wert in einem jQuery-Selektor hat, wie eckige Klammern), ein Leerzeichen haben, sind die inneren Anführungszeichen überflüssig. – Tomalak

0

Für aufwändigere Filter als „beginnt mit“ Sie filter() Funktion verwenden können:

$('#dialog li').filter(function() { 
    // return true for every element that matches your condition 
    return this.className.match(/^c/) != null; 
}).each(function(){ 
    //do something 
} 
1

Ich glaube nicht, dass es eine eingebaute in Selektor, um nach Klassen zu suchen, die mit einer Zeichenfolge beginnen.

Es ist ein Selektor, wenn ein Attribut beginnt mit einem String zu testen, wenn Sie also wissen, dass Ihre Elemente nur eine Klasse (oder immer mit der Klasse in Frage beginnen), könnten Sie tun:

$(this).is("class^='C'")

Wenn Sie jedoch keine der oben genannten Bedingungen erfüllen können, müssen Sie manuell jede auf dem Element definierte Klasse austeilen und testen, wie unter here beschrieben.

+0

das ist die richtige Antwort auf die Frage –

0

Sie können diesen Selektor versuchen. Das funktioniert, wenn es zwei oder mehr Klassen wie "Clown foo doo" und

gibt Sie können versuchen, aber so etwas wie $('#dialog li[class*="C"]') in diesem Fall wird alles auswählen, die den Buchstaben "C" enthalten, zum Beispiel "exCelence foo" .

Wenn Sie daran interessiert sind, zu zählen, wie viele Klassen mit "C" beginnen, unabhängig von ihrer Position (egal ob am Anfang, am und oder irgendwo in der Mitte), können Sie Folgendes ausprobieren:

$('#dialog li[class^="C"]').each(function() { 
    var classes = div.attr("class").split(" "); 
    var count = 0; 
    $.each(classes, function(i, v){ if(v.indexOf('C')!=-1) count++; }); 
    if (count == 1) alert("It has one 'C' class"); 
    if (count>1) alert("It more than one 'C' class"); 
} 
+0

'if (count) alert (" Es hat eine 'C' Klasse ");' wird passieren, wenn 'count> 1'too. – Danosaure