Determine si un elemento tiene una clase CSS con jQuery

173

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

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.

Mitchel Sellers
fuente
1
Si desea hacerlo sin jQuery, "hasClass" con javascript?
Oriol

Respuestas:

237

Usa el hasClassmétodo:

jQueryCollection.hasClass(className);

o

$(selector).hasClass(className);

El argumento es (obviamente) una cadena que representa la clase que está verificando, y devuelve un valor booleano (por lo que no admite el encadenamiento como la mayoría de los métodos jQuery).

Nota: Si pasa un classNameargumento que contiene espacios en blanco, se comparará literalmente con la classNamecadena de elementos de la colección . Entonces, si, por ejemplo, tienes un elemento,

<span class="foo bar" />

entonces esto devolverá true:

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

y estos volverán false:

$('span').hasClass('bar foo')
$('span').hasClass('foo  bar')
párpado
fuente
44
Estoy en desacuerdo. La documentación está organizada en categorías, pero también puede ver todos los métodos alfabéticamente fácilmente. Todo viene con un ejemplo, y la sección de comentarios generalmente aclara todo lo que queda fuera. jQuery tiene MUCHAS excelentes funciones y utilidades y se necesita aprender para descubrirlas todas. -EDITAR- Eso tiene sentido, definitivamente ha recorrido un largo camino.
Trafalmadorian
1
@Trafalmadorian, he eliminado mi comentario original porque la situación ha cambiado. Originalmente había publicado todo antes -EDIT-, y le 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 eliminó su comentario anterior y lo volvió a colocar con -EDIT-. Espero que esta limpieza sea un poco más clara y menos engañosa para los futuros lectores.
párpado
@daniloquio, es si vas directamente a api.jquery.com ... por alguna razón, el sitio web todavía tiene enlaces a la horrible versión wiki en docs.jquery.com
párpados
21

de las preguntas frecuentes

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

o:

elem = $("#elemid");
if (elem.hasClass ("class")) {
   // whatever
}
Javier
fuente
3
cuidado con .is () - "El método is () en jQuery devolverá verdadero si CUALQUIERA de los elementos en la colección actual coincide CUALQUIERA de los elementos en la colección basada en is" - bennadel.com/blog/…
zack
11

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

if (!currentPage.parent().hasClass('home')) { do what you want }
VinnyG
fuente
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');

¡Esto es MUCHO más rápido que jQuery!

Ismael Miguel
fuente
¿Por qué lo haces ...&&!!((' '+e.classname+' ').indexOf(' '+c+' ')+1), y no solo &&!(' '+e.classname+' ').indexOf(' '+c+' ')?
Blexy
1
Porque el indexOfrendimiento -1es que la clase no existe. Si lo hago !!-1, lo sería true. Como lo estoy haciendo !!-1+1, será falso. Una mejor manera sería ...&&!!~(' '+e.className+' ').indexOf(' '+c+' '), pero no lo recordaba en ese momento.
Ismael Miguel
Lo siento, quise decir...&&~(' '+e.className+' ').indexOf(' '+c+' ')
Ismael Miguel
3

En aras de ayudar a cualquiera que aterrice aquí pero en realidad estaba buscando una forma gratuita de jQuery de hacer esto:

element.classList.contains('your-class-name')
Derek Ekins
fuente
0
 $('.segment-name').click(function () {
    if($(this).hasClass('segment-a')){
        //class exist
    }
});
viña
fuente
0

En mi caso, utilicé el 'es' una función jQuery, tenía un elemento HTML con diferentes clases de CSS añadidas, estaba buscando una clase específica en el medio de estas, así que utilicé el "es" una buena alternativa para verificar una clase agregada dinámicamente a un elemento html, que ya tiene otras clases css, es otra buena alternativa.

ejemplo simple:

 <!--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();
    }
Eduardo Paz
fuente