¿Cómo haces jQuery's hasClass
con JavaScript simple? Por ejemplo,
<body class="foo thatClass bar">
¿Cuál es la forma de preguntar JavaScript si <body>
tiene thatClass
?
javascript
dom
Kyle
fuente
fuente
class
propiedad (que en el caso de varias clases tendrá varios nombres de clase en orden aleatorio separados por un espacio) y verificar si su nombre de clase está en ella. No es terriblemente difícil, pero sigue siendo terriblemente inconveniente si no es para aprender :)Respuestas:
Puede verificar si
element.className
coincide/\bthatClass\b/
.\b
coincide con un salto de palabra.O puede usar la propia implementación de jQuery:
Para responder a su pregunta más general, puede mirar el código fuente de jQuery en github o en la fuente
hasClass
específicamente en este visor de fuentes .fuente
rclass
realmente es))\b
coincidiría con "thatClass-anotherClass"?/[\t\r\n\f]/g
. También es bueno mencionar que/\bclass\b/
puede fallar para los nombres de clase con-
signo menos (aparte de eso funciona bien), es por eso que la implementación de jQuery es mejor y más confiable. Por ejemplo:/\bbig\b/.test('big-text')
devuelve verdadero en lugar de esperado falso.Simplemente use
classList.contains()
:Otros usos de
classList
:Soporte de navegador:
classList
Soporte de navegadorfuente
.classList
como una cadena, pero no reconocerá los métodos más modernos como.classList.contains()
El revestimiento más efectivo que
thisClass
un elemento que tieneclass="thisClass-suffix"
.fuente
El atributo que almacena las clases en uso es
className
.Entonces puedes decir:
Si desea una ubicación que le muestre cómo jQuery hace todo, le sugiero:
http://code.jquery.com/jquery-1.5.js
fuente
match
atributo vuelve a ser útil! ¿Realmente jQuery hace algo más de lo que es posible en JavaScript? Si no, jQuery es solo un peso innecesario de shorthands.myclass-something
, como\b
coincide con el guión.fuente
función hasClass:
Función addClass:
Función removeClass:
fuente
Utilizo una solución simple / mínima, una línea, navegador cruzado, y también funciona con navegadores heredados:
Este método es excelente porque no requiere polyfills y si los usa para
classList
ello es mucho mejor en términos de rendimiento. Al menos para mi.Actualización: hice un pequeño polyfill que es una solución completa que uso ahora:
Para la manipulación de otra clase, vea el archivo completo aquí .
fuente
notmyClassHere
?!/myClass/.test(document.body.className)
notar el!
símbolo.thisIsmyClassHere
.Una buena solución para esto es trabajar con classList y contiene.
Lo hice así:
Entonces necesita su elemento y verifique la lista de las clases. ¡Si una de las clases es la misma que la que busca, devolverá verdadero si no, devolverá falso!
fuente
Use algo como:
fuente
myHTMLSelector.classList.indexOf('the-class')
? ¿No quieres también>=0
al final?[].indexOf
siclassList
tiene uncontains
método?myHTMLSelector.classList.indexOf('the-class')
devuelve el error quemyHTMLSelector.classList.indexOf is not a function
porquemyHTMLSelector.classList
no es una matriz. Pero supongo que cuando se llama usandoArray.prototype
alguna conversión sucede. Esto puede ser compatible con navegadores antiguos, aunquecontains
tiene muy buen soporte.fuente
Esta función 'hasClass' funciona en IE8 +, FireFox y Chrome:
fuente
Bueno, todas las respuestas anteriores son bastante buenas, pero aquí hay una pequeña función simple que preparé. Funciona bastante bien
fuente
classList
tiene uncontains
método?¿Qué opinas sobre este enfoque?
https://jsfiddle.net/5sv30bhe/
fuente
class="nothatClassIsnt"
?Aquí está la forma más simple:
fuente