¿Cómo haces jQuery's hasClasscon 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

classpropiedad (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.classNamecoincide/\bthatClass\b/.\bcoincide 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
hasClassespecíficamente en este visor de fuentes .fuente
rclassrealmente es))\bcoincidirí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:
classListSoporte de navegadorfuente
.classListcomo una cadena, pero no reconocerá los métodos más modernos como.classList.contains()El revestimiento más efectivo que
thisClassun 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
matchatributo 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\bcoincide 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
classListello 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>=0al final?[].indexOfsiclassListtiene uncontainsmétodo?myHTMLSelector.classList.indexOf('the-class')devuelve el error quemyHTMLSelector.classList.indexOf is not a functionporquemyHTMLSelector.classListno es una matriz. Pero supongo que cuando se llama usandoArray.prototypealguna conversión sucede. Esto puede ser compatible con navegadores antiguos, aunquecontainstiene 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
classListtiene uncontainsmétodo?¿Qué opinas sobre este enfoque?
https://jsfiddle.net/5sv30bhe/
fuente
class="nothatClassIsnt"?Aquí está la forma más simple:
fuente