¿Cómo puedo cambiar una clase de un elemento HTML en respuesta a un onclick
evento usando JavaScript?
javascript
html
dom
Nathan Smith
fuente
fuente
element.setAttribute(name, value);
Reemplazarname
conclass
. Reemplacevalue
con cualquier nombre que le haya dado a la clase, entre comillas. Esto evita la necesidad de eliminar la clase actual y agregar una diferente. Este ejemplo de jsFiddle muestra el código de trabajo completo.<input type='button' onclick='addNewClass(this)' value='Create' />
y en la sección de JavaScript:function addNewClass(elem){ elem.className="newClass";
} En líneaRespuestas:
Técnicas HTML5 modernas para cambiar de clase
Los navegadores modernos han agregado classList que proporciona métodos para facilitar la manipulación de clases sin necesidad de una biblioteca:
Desafortunadamente, estos no funcionan en Internet Explorer antes de la versión 10, aunque hay una imitación para agregar soporte para IE8 e IE9, disponible en esta página . Sin embargo, es cada vez más compatible .
Solución simple de navegador cruzado
Se usa la forma estándar de JavaScript para seleccionar un elemento
document.getElementById("Id")
, que es lo que usan los siguientes ejemplos: por supuesto, puede obtener elementos de otras maneras, y en la situación correcta puede simplemente usarlothis
, sin embargo, entrar en detalles al respecto está más allá del alcance de la respuestaPara 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).
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 eliminar una clase de un elemento:
Para eliminar una sola clase de un elemento, sin afectar otras clases potenciales, se requiere un simple reemplazo de expresiones regulares:
Una explicación de esta expresión regular es la siguiente:
El
g
indicador le dice al reemplazo que se repita según sea necesario, en caso de que el nombre de la clase se haya agregado varias veces.Para verificar si una clase ya está aplicada a un elemento:
La misma expresión regular utilizada anteriormente para eliminar una clase también se puede utilizar para verificar si existe una clase en particular:
Asignación de estas acciones a eventos onclick:
Si bien es posible escribir JavaScript directamente dentro de los atributos del evento HTML (como
onclick="this.className+=' MyClass'"
), este no es un comportamiento recomendado. Especialmente en aplicaciones más grandes, se logra un código más mantenible separando el marcado HTML de la lógica de interacción de JavaScript.El primer paso para lograr esto es crear una función y llamar a la función en el atributo onclick, por ejemplo:
(No es necesario tener este código en las etiquetas de script, esto es simplemente por brevedad, e incluir el JavaScript en un archivo distinto puede ser más apropiado).
El segundo paso es mover el evento onclick fuera del HTML y en JavaScript, por ejemplo usando addEventListener
(Tenga en cuenta que la parte window.onload es necesaria para que el contenido de esa función se ejecute después de que el HTML haya terminado de cargarse; sin esto, MyElement podría no existir cuando se llama al código JavaScript, por lo que la línea fallaría).
Marcos y bibliotecas de JavaScript
El código anterior está todo en JavaScript estándar, sin embargo, es una práctica común usar un marco o una biblioteca para simplificar las tareas comunes, así como beneficiarse de errores fijos y casos extremos que quizás no piense al escribir su código.
Si bien algunas personas consideran que es excesivo agregar un marco de trabajo de ~ 50 KB para simplemente cambiar una clase, si está haciendo una cantidad considerable de trabajo de JavaScript, o cualquier cosa que pueda tener un comportamiento inusual entre navegadores, vale la pena considerarlo.
(En términos generales, una biblioteca es un conjunto de herramientas diseñadas para una tarea específica, mientras que un marco generalmente contiene varias bibliotecas y realiza un conjunto completo de tareas).
Los ejemplos anteriores se han reproducido a continuación utilizando jQuery , probablemente la biblioteca JavaScript más utilizada (aunque también hay otros que vale la pena investigar).
(Tenga en cuenta que
$
aquí está el objeto jQuery).Cambio de clases con jQuery:
Además, jQuery proporciona un acceso directo para agregar una clase si no se aplica, o eliminar una clase que sí:
Asignación de una función a un evento click con jQuery:
o, sin necesidad de una identificación:
fuente
class="button MyClass MyClass MyClass"
También podrías simplemente hacer:
Y para alternar una clase (eliminar si existe, agregarla):
fuente
classList
cuña de Eli Grey .classList
.En uno de mis proyectos anteriores que no usaba jQuery, construí las siguientes funciones para agregar, eliminar y verificar si el elemento tiene clase:
Entonces, por ejemplo, si quiero
onclick
agregar alguna clase al botón, puedo usar esto:Por ahora seguro que sería mejor usar jQuery.
fuente
Puedes usar
node.className
así:Esto debería funcionar en IE5.5 y versiones posteriores de acuerdo con PPK .
fuente
Wow, sorprendido de que haya tantas respuestas exageradas aquí ...
fuente
Usando código JavaScript puro:
fuente
Esto es trabajo para mí:
fuente
el.setAttribute('class', newClass)
o mejorel.className = newClass
. Pero noel.setAttribute('className', newClass)
.Además, puede extender el objeto HTMLElement para agregar métodos para agregar, eliminar, alternar y verificar clases ( gist ):
Y luego simplemente use así (al hacer clic agregará o eliminará la clase):
Aquí está la demostración .
fuente
Solo para agregar información de otro marco popular, Google Closures, vea su clase dom / classes :
Una opción para seleccionar el elemento es usar goog.dom.query con un selector CSS3:
fuente
Un par de notas menores y ajustes en las expresiones regulares anteriores:
Querrá hacerlo globalmente en caso de que la lista de clases tenga el nombre de la clase más de una vez. Y, probablemente querrá quitar espacios de los extremos de la lista de clases y convertir múltiples espacios en un espacio para evitar obtener tiradas de espacios. Ninguna de estas cosas debería ser un problema si el único código que utiliza los nombres de clase utiliza la expresión regular a continuación y elimina un nombre antes de agregarlo. Pero. Bueno, quién sabe quién podría estar cenando con la lista de nombres de clase.
Esta expresión regular no distingue entre mayúsculas y minúsculas, por lo que los errores en los nombres de clase pueden aparecer antes de que el código se use en un navegador que no se preocupa por mayúsculas y minúsculas en los nombres de clase.
fuente
Cambiar la clase CSS de un elemento con JavaScript en ASP.NET :
fuente
Usaría jQuery y escribiría algo como esto:
Este código agrega una función a la que se llama cuando se hace clic en un elemento de la identificación algún elemento . La función agrega clics al atributo de clase del elemento si aún no es parte de él, y lo elimina si está allí.
Sí, debe agregar una referencia a la biblioteca jQuery en su página para usar este código, pero al menos puede estar seguro de que la mayoría de las funciones de la biblioteca funcionarían en casi todos los navegadores modernos, y le ahorrará tiempo implementando tu propio código para hacer lo mismo.
Gracias
fuente
jQuery
en su forma larga una vez.jQuery(function($) { });
pone a$
disposición dentro de la función en todos los casos.La línea
debiera ser:
fuente
Cambiar la clase de un elemento en JavaScript vainilla con soporte para IE6
Puede intentar usar la
attributes
propiedad de nodo para mantener la compatibilidad con los navegadores antiguos, incluso IE6:fuente
Aquí está mi versión, totalmente funcional:
Uso:
fuente
foobar
si intentas eliminar la clasefoo
. El JS en los atributos del controlador de eventos intrínsecos se rompió antes de ser editado. La respuesta aceptada de 4 años es mucho mejor.foobar
problema. Vea la prueba aquíAquí hay una clase toggle para alternar / agregar / eliminar una clase en un elemento:
ver jsfiddle
También vea mi respuesta aquí para crear una nueva clase dinámicamente
fuente
Utilizo las siguientes funciones JavaScript de vainilla en mi código. Usan expresiones regulares y
indexOf
no requieren comillas especiales en las expresiones regulares.También puede usar element.classList en los navegadores modernos.
fuente
LAS OPCIONES.
Aquí hay un pequeño ejemplo de estilo frente a classList para que veas cuáles son las opciones que tienes disponibles y cómo usarlas
classList
para hacer lo que quieres.style
vs.classList
La diferencia entre
style
yclassList
es que constyle
que está añadiendo a las propiedades de estilo del elemento, peroclassList
está controlando un poco las clase (s) del elemento (add
,remove
,toggle
,contain
), voy a mostrar cómo utilizar eladd
yremove
método ya que esos son Los populares.Ejemplo de estilo
Si desea agregar
margin-top
propiedades a un elemento, lo haría de la siguiente manera:Ejemplo de classList
Vamos a decir que tenemos una
<div class="class-a class-b">
, en este caso, tenemos 2 clases añadidas a nuestro elemento div ya,class-a
yclass-b
, y queremos controlar qué clasesremove
y qué claseadd
. Aquí es donde seclassList
vuelve útil.Eliminar
class-b
Añadir
class-c
fuente
Solo pensé en tirar esto:
fuente
solo dígalo a
myElement.classList="new-class"
menos que necesite mantener otras clases existentes, en cuyo caso puede usar losclassList.add, .remove
métodos.fuente
OK, creo que en este caso deberías usar jQuery o escribir tus propios métodos en javascript puro, mi preferencia es agregar mis propios métodos en lugar de inyectar todo jQuery en mi aplicación si no lo necesito por otras razones.
Me gustaría hacer algo como a continuación como métodos para mi marco de JavaScript para agregar algunas funcionalidades que manejan agregar clases, eliminar clases, etc. similar a jQuery, esto es totalmente compatible con IE9 +, también mi código está escrito en ES6, por lo que necesita para asegurarse de que su navegador lo admita o que use algo como babel, de lo contrario, debe usar la sintaxis ES5 en su código, también de esta manera, buscamos el elemento a través de ID, lo que significa que el elemento debe tener una ID para seleccionar:
y simplemente puede llamar a usarlos como se muestra a continuación, imagine que su elemento tiene una identificación de 'id' y una clase de 'clase', asegúrese de pasarlos como una cadena, puede usar la utilidad de la siguiente manera:
fuente
classList
API DOM:Una forma muy conveniente de agregar y eliminar clases es la
classList
API DOM. Esta API nos permite seleccionar todas las clases de un elemento DOM específico para modificar la lista usando javascript. Por ejemplo:Podemos observar en el registro que estamos recuperando un objeto no solo con las clases del elemento, sino también con muchos métodos y propiedades auxiliares. Este objeto hereda de la interfaz DOMTokenList , una interfaz que se utiliza en el DOM para representar un conjunto de tokens separados por espacios (como las clases).
Ejemplo:
fuente
Sí, hay muchas formas de hacer esto. En la sintaxis de ES6 podemos lograrlo fácilmente. Use este código para alternar entre agregar y quitar clases.
fuente
El uso de la respuesta aceptada anteriormente aquí es una función simple de navegador cruzado para agregar y eliminar clases
agregar clase:
eliminar clase:
fuente
Muchas respuestas, muchas buenas respuestas.
O
Eso es.
Y, si realmente quieres saber por qué y educarte, te sugiero que leas la respuesta de Peter Boughton , es perfecto.
Nota:
Esto es posible con ( documento o evento ):
getElementById()
getElementsByClassName()
querySelector()
querySelectorAll()
fuente
Hay una propiedad className en javascript para cambiar el nombre de la clase de un elemento HTML. El valor de clase existente será reemplazado por el nuevo, que ha asignado en className.
Crédito: https://jaischool.com/javascript-lang/how-to-change-class-name-of-an-html-element-in-javascript.html
fuente
La pregunta OP fue ¿Cómo puedo cambiar la clase de un elemento con JavaScript?
Los navegadores modernos le permiten hacer esto con una línea de javascript :
document.getElementById('id').classList.replace('span1','span2')
El
classList
atributo proporciona una DOMTokenList que tiene una variedad de métodos . Puede operar en la lista de clases de un elemento utilizando manipulaciones simples como add () , remove () o replace () . O obtenga clases muy sofisticadas y manipule como si fuera un objeto o un mapa con claves () , valores () , entradas ()La respuesta de Peter Boughton es excelente, pero ahora tiene más de una década. Todos los navegadores modernos ahora admiten DOMTokenList: consulte https://caniuse.com/#search=classList e incluso IE11 admite algunos métodos DOMTokenList
fuente
tratar
Mostrar fragmento de código
fuente
Código de trabajo de JavaScript:
Puede descargar un código de trabajo desde este enlace .
fuente
Aquí hay un simple código jQuery para hacer eso.
Aquí,
Buena suerte.
fuente