2010-04-19 18 views

Respuesta

16

Carefull con $('#dialog li[class^="C"]')! Solo coincidirá con los elementos, cuyo atributo de clase comienza con "C" y no con una clase que comienza con C. Por ejemplo, no coincidirá con <li class="foo Clown">.

yo sepa lo que quiere no es posible jQuery mit solo. Necesitarías recorrer las clases y verificar cada una separadamente. Algo así como:

$('#dialog li').filter(function(){ 
    var classes = this.className.split(/\s/); 
    for (var i = 0, len = classes.length; i < len; i++) 
    if (/^C/.test(classes[i])) return true; 
    return false; 
}).each(...) 

Alternativamente, debe considerar cambiar su enfoque y dar a todos los elementos una clase adicional y filtrar por eso. Esto tiene la ventaja de que también se puede usar en CSS:

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

¡Gracias! Excelente enfoque! – ktMen

+0

Gracias. Acabo de ver un error, que corregiré. Debería haber usado filtro no cada uno. – RoToRa

+2

Es posible en jQuery como este: $ ("div [clase^= 'Payaso -'], div [clase * = 'Payaso-']") – Cojones

4

Prueba el Attribute Starts With Selector. Como extra, no hay necesidad de más si.

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

Si bien está bien para la mayoría de las personas, no ayudará a nadie que quiera comprobar si un conjunto existente de elementos tiene una clase que comienza con un carácter. – ProblemsOfSumit

0

intentar algo así como $('#dialog li[class^="C"]')

+1

Las comillas internas son innecesarias: '$ ('# dialog li [class^= C]')' funciona también. – Tomalak

+0

@Tomalak - Los documentos jQuery los tienen, ¡pero es bueno saberlo! – justkt

+0

@justkt: a menos que tenga un espacio en la cadena que busca (o cualquier otra cosa que tenga valor sintáctico en un selector jQuery, como corchetes), las comillas internas son superfluas. – Tomalak

0

Para los filtros más elaborado que "comienza con" que puede utilizar la función filter():

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

No creo que hay un built-in selector para probar las clases comenzando con una cadena.

Hay un selector para probar si un atributo comienza con una cadena, por lo que si usted sabe que sus elementos sólo tienen una clase (o siempre comienzan con la clase en cuestión), se puede hacer:

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

Sin embargo, si no puede garantizar ninguna de las condiciones anteriores, deberá dividir manualmente y probar cada clase definida en el elemento, como se describe here.

+0

esta es la respuesta correcta a la pregunta –

0

Puede probar ese selector. Eso funcionará si hay dos o más clases como esta "Clown foo doo" y

Puede intentar algo como esto $('#dialog li[class*="C"]') en cuyo caso seleccionará cualquier cosa que incluya la letra "C", por ejemplo "exCelence foo" .

Si le interesa contar cuántas clases comienzan con "C" sin importar su posición (no importa si están al principio, en el medio o en algún punto intermedio), entonces puede intentar algo como esto:

$('#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 (" Tiene una clase 'C' ");' ocurrirá si 'count> 1'too. – Danosaure

Cuestiones relacionadas