2008-11-04 23 views
172

Estoy trabajando con jQuery y estoy buscando si hay una manera fácil de determinar si el elemento tiene una clase de CSS específica asociada.Determinar si un elemento tiene una clase de CSS con jQuery

Tengo la identificación del elemento y la clase CSS que estoy buscando. Solo necesito poder, en una declaración if, hacer una comparación basada en la existencia de esa clase en el elemento.

+0

Si desea hacerlo sin jQuery, ["hasClass" con javascript?] (Http://stackoverflow.com/q/5085567/1529630) – Oriol

Respuesta

238

Utilice el método hasClass:

jQueryCollection.hasClass(className); 

o

$(selector).hasClass(className); 

El argumento es (obviamente) una cadena que representa la clase que usted está mirando, y devuelve un valor lógico (por lo que no hace soporte de encadenamiento como la mayoría de los métodos de jQuery).

Nota: Si pasa un argumento className que contiene espacios en blanco, que se hará coincidir literalmente contra className cadena de elementos de la colección. Así que si, por ejemplo, tiene un elemento,

<span class="foo bar" /> 

entonces esto volverá true:

$('span').hasClass('foo bar') 

y éstos volverán false:

$('span').hasClass('bar foo') 
$('span').hasClass('foo bar') 
+7

Exactamente. Documentación aquí: http://docs.jquery.com/Traversing/hasClass –

+4

No estoy de acuerdo. La documentación está organizada en categorías, pero también puede ver fácilmente todos los métodos alfabéticamente. Todo viene con un ejemplo, y la sección de comentarios generalmente borra todo lo que queda fuera. jQuery tiene MUCHAS funciones y utilidades excelentes y requiere un poco de aprendizaje descubrirlas todas. -EDIT- Eso tiene sentido, definitivamente ha recorrido un largo camino. – Trafalmadorian

+1

@Trafalmadorian, eliminé mi comentario original porque la situación ha cambiado. Originalmente, usted había publicado todo antes de -EDIT-, y respondí que mi comentario sobre la calidad de la documentación ya no era relevante sino que se refería a su sistema anterior (MediaWiki). Luego borraste tu comentario anterior y reposicionaste con -EDIT-. Espero que esta limpieza sea un poco más clara y menos engañosa para los lectores futuros. – eyelidlessness

20

del FAQ

elem = $("#elemid"); 
if (elem.is (".class")) { 
    // whatever 
} 

o:

elem = $("#elemid"); 
if (elem.hasClass ("class")) { 
    // whatever 
} 
+3

cuidadoso con .is() - "The is() El método en jQuery devolverá verdadero si CUALQUIERA de los elementos en la colección actual concuerda con CUALQUIERA de los elementos en la colección basada en is "- http://www.bennadel.com/blog/1725-jQuery-s-is-Method- Checks-For-Any-Matching-Elements.htm – zack

11

En cuanto a la negación, si desea saber si un elemento tiene una clase no puede simplemente hacer como Mark dijo.

if (!currentPage.parent().hasClass('home')) { do what you want } 
3

Sin jQuery:

var hasclass=!!(' '+elem.className+' ').indexOf(' check_class ')+1; 

O:

function hasClass(e,c){ 
    return e&&(e instanceof HTMLElement)&&!!((' '+e.className+' ').indexOf(' '+c+' ')+1); 
} 
/*example of usage*/ 
var has_class_medium=hasClass(document.getElementsByTagName('input')[0],'medium'); 

Ésta es la manera más rápida que jQuery!

+0

¿Por qué haces '... && !! (('' + e.classname + '') .indexOf ('' + c + '') +1)', y no solo '&&! ('' + e.classname + '') .indexOf ('' + c + '')'? – Blexy

+1

Porque 'indexOf' devuelve' -1' es que la clase no existe. Si hago '!! - 1', sería' verdad'. Como estoy haciendo '!! - 1 + 1', será falso. Una mejor manera sería '... && !! ~ ('' + e.className + '') .indexOf ('' + c + '')', pero no lo recordé en ese momento. –

+0

Lo siento, quise decir '... && ~ ('' + e.className + '') .indexOf ('' + c + '')' –

0
$('.segment-name').click(function() { 
    if($(this).hasClass('segment-a')){ 
     //class exist 
    } 
}); 
0

En mi caso, he utilizado el 'es' una función de jQuery, que tenía un elemento HTML con diferentes clases CSS agregó, que estaba buscando una clase específica en medio de ellos, por lo que utiliza el " es "una buena alternativa para verificar una clase agregada dinámicamente a un elemento html, que ya tiene otras clases de css, es otra buena alternativa".

ejemplo sencillo:

<!--element html--> 
<nav class="cbp-spmenu cbp-spmenu-horizontal cbp-spmenu-bottom cbp-spmenu-open" id="menu">somethings here... </nav> 

<!--jQuery "is"--> 
$('#menu').is('.cbp-spmenu-open'); 

ejemplo avanzado:

<!--element html--> 
    <nav class="cbp-spmenu cbp-spmenu-horizontal cbp-spmenu-bottom cbp-spmenu-open" id="menu">somethings here... </nav> 

    <!--jQuery "is"--> 
    if($('#menu').is('.cbp-spmenu-bottom.cbp-spmenu-open')){ 
     $("#menu").show(); 
    } 
0

En aras de ayudar a cualquier persona que aterriza aquí, pero en realidad estaba buscando una manera libre de jQuery de hacer esto:

element.classList.contains('your-class-name') 
Cuestiones relacionadas