Comment puis-je changer une classe d'un élément HTML en réponse à un onclick
événement en utilisant JavaScript?
javascript
html
dom
Nathan Smith
la source
la source
element.setAttribute(name, value);
Remplacezname
parclass
. Remplacezvalue
par le nom que vous avez donné à la classe, entre guillemets. Cela évite d'avoir à supprimer la classe actuelle et à en ajouter une autre. Cet exemple jsFiddle montre le code de travail complet.<input type='button' onclick='addNewClass(this)' value='Create' />
et dans la section javascript:function addNewClass(elem){ elem.className="newClass";
} En ligneRéponses:
Techniques HTML5 modernes pour changer de classe
Les navigateurs modernes ont ajouté classList qui fournit des méthodes pour faciliter la manipulation des classes sans avoir besoin d'une bibliothèque:
Malheureusement, ceux-ci ne fonctionnaient pas dans Internet Explorer avant la version 10, bien qu'il existe un module d' interface pour l'ajouter à IE8 et IE9, disponible à partir de cette page . Il est, cependant, de plus en plus pris en charge .
Solution multi-navigateur simple
La méthode JavaScript standard pour sélectionner un élément utilise
document.getElementById("Id")
, ce que les exemples suivants utilisent - vous pouvez bien sûr obtenir des éléments d'autres manières, et dans la bonne situation, vous pouvez simplement utiliserthis
place - cependant, entrer dans les détails à ce sujet dépasse le cadre de la réponse.Pour modifier toutes les classes d'un élément:
Pour remplacer toutes les classes existantes par une ou plusieurs nouvelles classes, définissez l'attribut className:
(Vous pouvez utiliser une liste délimitée par des espaces pour appliquer plusieurs classes.)
Pour ajouter une classe supplémentaire à un élément:
Pour ajouter une classe à un élément, sans supprimer / affecter les valeurs existantes, ajoutez un espace et le nouveau nom de classe, comme ceci:
Pour supprimer une classe d'un élément:
Pour supprimer une seule classe d'un élément, sans affecter d'autres classes potentielles, un simple regex replace est requis:
Une explication de cette expression régulière est la suivante:
le
g
indicateur indique au remplacement de se répéter selon les besoins, au cas où le nom de classe a été ajouté plusieurs fois.Pour vérifier si une classe est déjà appliquée à un élément:
La même expression régulière utilisée ci-dessus pour supprimer une classe peut également être utilisée pour vérifier si une classe particulière existe:
Affectation de ces actions aux événements onclick:
Bien qu'il soit possible d'écrire JavaScript directement à l'intérieur des attributs d'événement HTML (tels que
onclick="this.className+=' MyClass'"
), ce comportement n'est pas recommandé. Surtout sur les applications plus grandes, un code plus facile à maintenir est obtenu en séparant le balisage HTML de la logique d'interaction JavaScript.La première étape pour y parvenir consiste à créer une fonction et à appeler la fonction dans l'attribut onclick, par exemple:
(Il n'est pas nécessaire d'avoir ce code dans les balises de script, c'est simplement pour la brièveté de l'exemple, et l'inclusion de JavaScript dans un fichier distinct peut être plus appropriée.)
La deuxième étape consiste à déplacer l'événement onclick hors du HTML et dans JavaScript, par exemple en utilisant addEventListener
(Notez que la partie window.onload est requise pour que le contenu de cette fonction soit exécuté après le chargement du HTML - sans cela, MyElement pourrait ne pas exister lorsque le code JavaScript est appelé, de sorte que la ligne échouerait.)
Cadres et bibliothèques JavaScript
Le code ci-dessus est entièrement en JavaScript standard, mais il est courant d'utiliser soit un framework ou une bibliothèque pour simplifier les tâches courantes, ainsi que de bénéficier de bogues fixes et de cas marginaux auxquels vous pourriez ne pas penser lors de l'écriture de votre code.
Bien que certaines personnes considèrent qu'il est exagéré d'ajouter un cadre de ~ 50 Ko pour simplement changer une classe, si vous effectuez une quantité substantielle de travail JavaScript ou tout ce qui pourrait avoir un comportement inhabituel entre les navigateurs, cela vaut la peine d'être considéré.
(En gros, une bibliothèque est un ensemble d'outils conçus pour une tâche spécifique, tandis qu'un cadre contient généralement plusieurs bibliothèques et exécute un ensemble complet de fonctions.)
Les exemples ci-dessus ont été reproduits ci-dessous à l'aide de jQuery , probablement la bibliothèque JavaScript la plus utilisée (bien qu'il y en ait d'autres qui méritent également d'être étudiés).
(Notez que
$
voici l'objet jQuery.)Changer de classe avec jQuery:
De plus, jQuery fournit un raccourci pour ajouter une classe si elle ne s'applique pas ou pour supprimer une classe qui:
Assigner une fonction à un événement de clic avec jQuery:
ou, sans avoir besoin d'un identifiant:
la source
class="button MyClass MyClass MyClass"
Vous pouvez aussi simplement faire:
Et pour basculer une classe (supprimez s'il existe sinon ajoutez-la):
la source
classList
cale d' Eli Grey .classList
.Dans l'un de mes anciens projets qui n'utilisaient pas jQuery, j'ai construit les fonctions suivantes pour ajouter, supprimer et vérifier si l'élément a une classe:
Ainsi, par exemple, si je veux
onclick
ajouter une classe au bouton, je peux utiliser ceci:À l'heure actuelle, il serait préférable d'utiliser jQuery.
la source
Vous pouvez utiliser
node.className
comme ceci:Cela devrait fonctionner dans IE5.5 et supérieur selon PPK .
la source
Wow, surpris qu'il y ait tant de réponses exagérées ici ...
la source
En utilisant du code JavaScript pur:
la source
Cela fonctionne pour moi:
la source
el.setAttribute('class', newClass)
ou mieuxel.className = newClass
. Mais nonel.setAttribute('className', newClass)
.Vous pouvez également étendre l'objet HTMLElement, afin d'ajouter des méthodes pour ajouter, supprimer, basculer et vérifier les classes ( gist ):
Et puis il suffit d'utiliser comme ceci (au clic, on ajoutera ou supprimera une classe):
Voici la démo .
la source
Pour ajouter des informations sur un autre framework populaire, Google Closures, consultez leur classe dom / classes :
Une option pour sélectionner l'élément est d'utiliser goog.dom.query avec un sélecteur CSS3:
la source
Quelques notes et ajustements mineurs sur les expressions régulières précédentes:
Vous voudrez le faire globalement au cas où la liste de classe a le nom de classe plus d'une fois. Et, vous voudrez probablement supprimer les espaces des extrémités de la liste des classes et convertir plusieurs espaces en un seul espace pour éviter d'obtenir des séries d'espaces. Aucune de ces choses ne devrait être un problème si le seul code associé aux noms de classe utilise l'expression régulière ci-dessous et supprime un nom avant de l'ajouter. Mais. Eh bien, qui sait qui pourrait penser à la liste des noms de classe.
Cette expression régulière n'est pas sensible à la casse afin que les bogues dans les noms de classe puissent apparaître avant que le code ne soit utilisé sur un navigateur qui ne se soucie pas de la casse dans les noms de classe.
la source
Modifiez la classe CSS d'un élément avec JavaScript dans ASP.NET :
la source
J'utiliserais jQuery et j'écrirais quelque chose comme ceci:
Ce code ajoute une fonction à appeler lorsqu'un élément de l'id un élément est cliqué. La fonction ajoute cliqué sur l'attribut de classe de l'élément s'il n'en fait pas déjà partie et le supprime s'il est là.
Oui, vous devez ajouter une référence à la bibliothèque jQuery dans votre page pour utiliser ce code, mais au moins vous pouvez être sûr que la plupart des fonctions de la bibliothèque fonctionneraient sur à peu près tous les navigateurs modernes, et cela vous fera gagner du temps votre propre code pour faire de même.
Merci
la source
jQuery
dans sa forme longue.jQuery(function($) { });
rend$
disponible dans la fonction dans tous les cas.La ligne
devrait être:
la source
Changer la classe d'un élément en JavaScript vanilla avec le support IE6
Vous pouvez essayer d'utiliser la
attributes
propriété de nœud pour conserver la compatibilité avec les anciens navigateurs, même IE6:la source
Voici ma version, entièrement fonctionnelle:
Usage:
la source
foobar
si vous essayez de supprimer la classefoo
. Le JS dans les attributs intrinsèques du gestionnaire d'événements a été rompu avant d'être modifié. La réponse acceptée de 4 ans est bien meilleure.foobar
problème. Voir le test iciVoici un toggleClass pour basculer / ajouter / supprimer une classe sur un élément:
voir jsfiddle
voir aussi ma réponse ici pour créer une nouvelle classe dynamiquement
la source
J'utilise les fonctions JavaScript vanilla suivantes dans mon code. Ils utilisent des expressions régulières et
indexOf
ne nécessitent pas de guillemets spéciaux dans les expressions régulières.Vous pouvez également utiliser element.classList dans les navigateurs modernes.
la source
LES OPTIONS.
Voici quelques exemples de style vs classList pour vous aider à voir quelles sont les options disponibles et comment utiliser
classList
pour faire ce que vous voulez.style
contre.classList
La différence entre
style
etclassList
est que , avecstyle
vous ajoutez aux propriétés de style de l'élément, maisclassList
est de contrôler un peu la classe (s) de l'élément (add
,remove
,toggle
,contain
), je vais vous montrer comment utiliseradd
etremove
méthode puisque ceux -ci sont les plus populaires.Exemple de style
Si vous voulez ajouter une
margin-top
propriété dans un élément, vous feriez comme ceci:Exemple classList
Disons que nous avons un
<div class="class-a class-b">
, dans ce cas, nous avons déjà 2 classes ajoutées à notre élément div,class-a
etclass-b
, et nous voulons contrôler quelles classesremove
et à quelle classeadd
. C'est ici queclassList
devient pratique.Retirer
class-b
Ajouter
class-c
la source
Je pensais juste que je mettrais ceci:
la source
dites simplement à
myElement.classList="new-class"
moins que vous n'ayez besoin de maintenir d'autres classes existantes, auquel cas vous pouvez utiliser leclassList.add, .remove
méthodes.la source
OK, je pense que dans ce cas, vous devez utiliser jQuery ou écrire vos propres méthodes en javascript pur, ma préférence est d'ajouter mes propres méthodes plutôt que d'injecter tout jQuery dans mon application si je n'en ai pas besoin pour d'autres raisons.
J'aimerais faire quelque chose comme ci-dessous en tant que méthodes dans mon framework javascript pour ajouter quelques fonctionnalités qui gèrent l'ajout de classes, la suppression de classes, etc. similaires à jQuery, cela est entièrement pris en charge dans IE9 +, mon code est également écrit dans ES6, vous avez donc besoin pour vous assurer que votre navigateur le prend en charge ou que vous utilisez quelque chose comme babel, sinon vous devez utiliser la syntaxe ES5 dans votre code, de cette manière également, nous trouvons l'élément via ID, ce qui signifie que l'élément doit avoir un ID pour être sélectionné:
et vous pouvez simplement appeler use them comme ci-dessous, imaginez que votre élément a l'id de 'id' et la classe de 'class', assurez-vous de les passer comme une chaîne, vous pouvez utiliser l'util comme ci-dessous:
la source
classList
API DOM:L'
classList
API DOM est une manière très pratique d'ajouter et de supprimer des classes . Cette API nous permet de sélectionner toutes les classes d'un élément DOM spécifique afin de modifier la liste en utilisant javascript. Par exemple:Nous pouvons observer dans le journal que nous récupérons un objet avec non seulement les classes de l'élément, mais aussi de nombreuses méthodes et propriétés auxiliaires. Cet objet hérite de l'interface DOMTokenList , une interface qui est utilisée dans le DOM pour représenter un ensemble de jetons séparés par des espaces (comme les classes).
Exemple:
la source
Oui, il existe de nombreuses façons de procéder. Dans la syntaxe ES6, nous pouvons le réaliser facilement. Utilisez ce code pour basculer ajouter et supprimer une classe.
la source
en utilisant la réponse acceptée ci-dessus, voici une simple fonction multi-navigateur pour ajouter et supprimer une classe
ajouter une classe:
supprimer la classe:
la source
Beaucoup de réponses, beaucoup de bonnes réponses.
OU
C'est ça.
Et, si vous voulez vraiment savoir pourquoi et vous renseigner, je suggère de lire la réponse de Peter Boughton , c'est parfait.
Remarque:
Ceci est possible avec ( document ou événement ):
getElementById()
getElementsByClassName()
querySelector()
querySelectorAll()
la source
Il existe une propriété className en javascript pour changer le nom de la classe d'un élément HTML. La valeur de classe existante sera remplacée par la nouvelle que vous avez affectée dans className.
Crédit - https://jaischool.com/javascript-lang/how-to-change-class-name-of-an-html-element-in-javascript.html
la source
La question OP était: Comment puis-je changer la classe d'un élément avec JavaScript?
Les navigateurs modernes vous permettent de le faire avec une seule ligne de javascript :
document.getElementById('id').classList.replace('span1','span2')
L'
classList
attribut fournit un DOMTokenList qui a une variété de méthodes . Vous pouvez opérer sur la classList d'un élément en utilisant des manipulations simples comme add () , remove () ou replace () . Ou obtenez des classes très sophistiquées et manipulez comme vous le feriez avec un objet ou une carte avec keys () , values () , entries ()La réponse de Peter Boughton est excellente, mais elle a maintenant plus de dix ans. Tous les navigateurs modernes prennent désormais en charge DOMTokenList - voir https://caniuse.com/#search=classList et même IE11 prend en charge certaines méthodes DOMTokenList
la source
essayer
Afficher l'extrait de code
la source
Code JavaScript fonctionnel:
Vous pouvez télécharger un code de travail à partir de ce lien .
la source
Voici un code jQuery simple pour le faire.
Ici,
Bonne chance.
la source