Tengo un elemento que ya tiene una clase:
<div class="someclass">
<img ... id="image1" name="image1" />
</div>
Ahora quiero crear una función de JavaScript que agregará una clase a div
(no reemplazar, pero agregar).
¿Cómo puedo hacer eso?
javascript
css
dom-manipulation
Blankman
fuente
fuente
element.classList.add("my-class")
lugar.Respuestas:
Si solo se dirige a los navegadores modernos:
Use element.classList.add para agregar una clase:
Y element.classList.remove para eliminar una clase:
Si necesita admitir Internet Explorer 9 o inferior:
Agregue un espacio más el nombre de su nueva clase a la
className
propiedad del elemento. Primero, coloque unid
elemento en el elemento para que pueda obtener fácilmente una referencia.Entonces
Tenga en cuenta el espacio antes
otherclass
. Es importante incluir el espacio; de lo contrario, compromete las clases existentes que aparecen antes en la lista de clases.Vea también element.className en MDN .
fuente
La forma más fácil de hacer esto sin ningún marco es usar el método element.classList.add .
Editar: y si desea eliminar la clase de un elemento,
Prefiero no tener que agregar ningún espacio vacío y duplicar el manejo de entradas (lo cual es necesario cuando se usa el
document.className
enfoque). Existen algunas limitaciones del navegador , pero puede solucionarlas utilizando polyfills .fuente
encuentre su elemento objetivo "d" como desee y luego:
puede envolverlo en formas más inteligentes para verificar la preexistencia y verificar los requisitos de espacio, etc.
fuente
split
el nombre de clase en el espacio en blanco, elimine el que no desea de la matriz resultante, luegojoin
la matriz nuevamente ... o useelement.classList.remove
.Agregar clase
Compatible con cruz
En el siguiente ejemplo, agregamos
classname
a al<body>
elemento. Esto es compatible con IE-8.Esto es una abreviatura de lo siguiente ...
Actuación
Si está más preocupado por el rendimiento sobre la compatibilidad cruzada, puede acortarlo a lo siguiente, que es un 4% más rápido.
Conveniencia
Alternativamente, podría usar jQuery pero el rendimiento resultante es significativamente más lento. 94% más lento según jsPerf
Eliminar la clase
Actuación
Usar jQuery de forma selectiva es el mejor método para eliminar una clase si le preocupa el rendimiento
Sin jQuery es un 32% más lento
Referencias
Usando prototipo
Usando YUI
fuente
a.classList ? ...
) tendrá alguna diferencia de velocidad en comparación con la normal (if (a.classList) { ....
)?classList.remove()
. ¿Por qué no lo usaste? es mucho más rápido que jQuery jsperf.com/remove-class-vanilla-vs-jqueryclassList
para todo excepto para eliminar clases, es por eso que lo pregunto.Otro enfoque para agregar la clase al elemento usando JavaScript puro
Para agregar clase:
Para eliminar la clase:
fuente
Cuando el trabajo que estoy haciendo no garantiza el uso de una biblioteca, uso estas dos funciones:
fuente
if( cn.indexOf( classname ) != -1 ) { return; }
Tenga en cuenta que si agrega la clase "btn" con la clase "btn-info" que ya está aquí, esto falla.element.className.split(" ");
para prevenir el problema @AlexandreDieulot reportado aquí.Suponiendo que está haciendo más que solo agregar esta clase (por ejemplo, también tiene solicitudes asincrónicas, etc.), recomendaría una biblioteca como Prototype o jQuery .
Esto hará que todo lo que necesite hacer (incluido esto) sea muy simple.
Entonces, supongamos que tiene jQuery en su página ahora, podría usar un código como este para agregar un nombre de clase a un elemento (en carga, en este caso):
Consulte el navegador jQuery API para otras cosas.
fuente
Puede usar el método classList.add O classList.remove para agregar / eliminar una clase de un elemento.
El código anterior agregará (y NO reemplazará) una clase "anyclass" a nameElem. Del mismo modo, puede usar el método classList.remove () para eliminar una clase.
fuente
Para agregar una clase adicional a un elemento:
Para agregar una clase a un elemento, sin eliminar / afectar los valores existentes, agregue un espacio y el nuevo nombre de clase, así:
Para cambiar todas las clases para un elemento:
Para reemplazar todas las clases existentes con una o más clases nuevas, establezca el atributo className:
(Puede usar una lista delimitada por espacios para aplicar varias clases).
fuente
Si no desea utilizar jQuery y desea admitir navegadores antiguos:
fuente
Sé que IE9 se apaga oficialmente y podemos lograrlo con la
element.classList
cantidad mencionada anteriormente, pero intenté aprender cómo funciona sin laclassList
ayuda de muchas de las respuestas anteriores.El siguiente código extiende muchas respuestas anteriores y las mejora al evitar agregar clases duplicadas.
fuente
También creo que la forma más rápida es usar Element.prototype.classList como en es5:
document.querySelector(".my.super-class").classList.add('new-class')
pero en ie8 no existe el elemento Element.prototype.classList, de todos modos puedes rellenarlo con este fragmento (puedes editarlo y mejorarlo) ):fuente
Solo para explicar lo que otros han dicho, varias clases de CSS se combinan en una sola cadena, delimitada por espacios. Por lo tanto, si desea codificarlo, simplemente se vería así:
Desde allí, puede derivar fácilmente el javascript necesario para agregar una nueva clase ... simplemente agregue un espacio seguido de la nueva clase a la propiedad className del elemento. Sabiendo esto, también puede escribir una función para eliminar una clase más tarde si surge la necesidad.
fuente
Para agregar, eliminar o verificar clases de elementos de una manera simple:
fuente
Puede usar un enfoque moderno similar a jQuery
Si necesita cambiar solo un elemento, el primero que JS encontrará en DOM, puede usar esto:
Tenga en cuenta dejar un espacio antes nombre de la clase.
Si tiene varias clases donde desea agregar una nueva clase, puede usarla así
fuente
Creo que es mejor usar JavaScript puro, que podemos ejecutar en el DOM del navegador.
Aquí está la forma funcional de usarlo. He usado ES6, pero siéntase libre de usar ES5 y la función de expresión o definición de función, lo que se adapte a su JavaScript StyleGuide.
fuente
Muestra con puro JS. En el primer ejemplo obtenemos la identificación de nuestro elemento y agregamos, por ejemplo, 2 clases.
En el segundo ejemplo, obtenemos el nombre de la clase del elemento y agregamos 1 más.
fuente
Para aquellos que usan Lodash y desean actualizar la
className
cadena:fuente
primero, dale una identificación al div. Luego, llame a la función appendClass:
fuente
indexOf
es una solución ingenua y ya tiene un problema señalado .Puede usar el API querySelector para seleccionar su elemento y luego crear una función con el elemento y el nuevo nombre de clase como parámetros. Usando classlist para navegadores modernos, de lo contrario para IE8. Luego puede llamar a la función después de un evento.
fuente
Más corto
Mostrar fragmento de código
fuente
O:
El primer enfoque ayudó a agregar la clase cuando el segundo enfoque no funcionó.
No olvides mantener un espacio frente a la
' someclassname'
primer enfoque.Para la eliminación, puede usar:
fuente
Este código js me funciona
proporciona reemplazo de nombre de clase
Para agregar solo use
Para eliminar el uso
Espero que esto sea útil para sombody
fuente
En YUI, si incluye yuidom , puede usar
YAHOO.util.Dom.addClass('div1','className');
HTH
fuente