J'ai un élément qui a déjà une classe:
<div class="someclass">
<img ... id="image1" name="image1" />
</div>
Maintenant, je veux créer une fonction JavaScript qui ajoutera une classe à div
(pas remplacer, mais ajouter).
Comment puis je faire ça?
javascript
css
dom-manipulation
Blankman
la source
la source
element.classList.add("my-class")
place.Réponses:
Si vous ne ciblez que les navigateurs modernes:
Utilisez element.classList.add pour ajouter une classe:
Et element.classList.remove pour supprimer une classe:
Si vous devez prendre en charge Internet Explorer 9 ou une version antérieure:
Ajoutez un espace plus le nom de votre nouvelle classe à la
className
propriété de l'élément. Tout d'abord, mettez unid
sur l'élément afin que vous puissiez facilement obtenir une référence.alors
Notez l'espace avant
otherclass
. Il est important d'inclure l'espace sinon il compromet les classes existantes qui le précèdent dans la liste des classes.Voir aussi element.className sur MDN .
la source
La façon la plus simple de le faire sans aucun framework est d'utiliser la méthode element.classList.add .
Edit: Et si vous voulez supprimer la classe d'un élément -
Je préfère ne pas avoir à ajouter d'espace vide et à dupliquer la gestion des entrées moi-même (ce qui est requis lors de l'utilisation de l'
document.className
approche). Il existe certaines limitations du navigateur , mais vous pouvez les contourner à l'aide de polyfills .la source
trouvez votre élément cible "d" comme vous le souhaitez et ensuite:
vous pouvez envelopper cela de manière plus intelligente pour vérifier la préexistence et vérifier les besoins en espace, etc.
la source
split
le nom de classe sur les espaces, supprimez celui que vous ne voulez pas du tableau résultant, puisjoin
le tableau à nouveau ... ou utilisezelement.classList.remove
.Ajouter une classe
Cross Compatible
Dans l'exemple suivant, nous ajoutons un
classname
à l'<body>
élément. Ceci est compatible IE-8.Ceci est un raccourci pour les éléments suivants.
Performance
Si vous êtes plus soucieux des performances que de la compatibilité croisée, vous pouvez les raccourcir comme suit, ce qui est 4% plus rapide.
Commodité
Vous pouvez également utiliser jQuery mais les performances résultantes sont nettement plus lentes. 94% plus lent selon jsPerf
Supprimer la classe
Performance
L'utilisation sélective de jQuery est la meilleure méthode pour supprimer une classe si vous êtes préoccupé par les performances
Sans jQuery c'est 32% plus lent
Références
Utilisation du prototype
Utiliser YUI
la source
a.classList ? ...
) aura-t-elle une différence de vitesse par rapport à la version normale (if (a.classList) { ....
)?classList.remove()
. Pourquoi ne l'avez-vous pas utilisé? c'est beaucoup plus rapide que jQuery jsperf.com/remove-class-vanilla-vs-jqueryclassList
pour tout sauf pour supprimer des classes, c'est pourquoi je le demande.Une autre approche pour ajouter la classe à l'élément à l'aide de JavaScript pur
Pour ajouter de la classe:
Pour supprimer une classe:
la source
Lorsque le travail que je fais ne justifie pas l'utilisation d'une bibliothèque, j'utilise ces deux fonctions:
la source
if( cn.indexOf( classname ) != -1 ) { return; }
Attention, si vous ajoutez la classe «btn» alors que la classe «btn-info» est déjà là, cela échoue.element.className.split(" ");
pour éviter le problème @AlexandreDieulot signalé ici.En supposant que vous faites plus que simplement ajouter cette seule classe (par exemple, vous avez des demandes asynchrones et ainsi de suite), je recommanderais une bibliothèque comme Prototype ou jQuery .
Cela rendra à peu près tout ce que vous devrez faire (y compris cela) très simple.
Disons que vous avez jQuery sur votre page maintenant, vous pouvez utiliser du code comme celui-ci pour ajouter un nom de classe à un élément (au chargement, dans ce cas):
Consultez le navigateur de l'API jQuery pour d'autres choses.
la source
Vous pouvez utiliser la méthode classList.add OU classList.remove pour ajouter / supprimer une classe d'un élément.
Le code ci-dessus ajoutera (et ne remplacera PAS) une classe "anyclass" à nameElem. De même, vous pouvez utiliser la méthode classList.remove () pour supprimer une classe.
la source
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 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.)
la source
Si vous ne souhaitez pas utiliser jQuery et souhaitez prendre en charge les anciens navigateurs:
la source
Je sais qu'IE9 est officiellement arrêté et nous pouvons y arriver avec
element.classList
autant de choses que je l'ai dit ci-dessus, mais j'ai juste essayé d'apprendre comment cela fonctionne sans l'classList
aide de nombreuses réponses ci-dessus, je pourrais l'apprendre.Le code ci-dessous étend de nombreuses réponses ci-dessus et les améliore en évitant d'ajouter des classes en double.
la source
Je pense aussi que le moyen le plus rapide est d'utiliser Element.prototype.classList comme dans es5:
document.querySelector(".my.super-class").classList.add('new-class')
mais dans ie8 il n'y a rien de tel que Element.prototype.classList, de toute façon vous pouvez le polyfill avec cet extrait (n'hésitez pas à le modifier et à l'améliorer) ):la source
Juste pour développer ce que les autres ont dit, plusieurs classes CSS sont combinées dans une seule chaîne, délimitée par des espaces. Ainsi, si vous vouliez le coder en dur, cela ressemblerait simplement à ceci:
De là, vous pouvez facilement dériver le javascript nécessaire pour ajouter une nouvelle classe ... il suffit d'ajouter un espace suivi de la nouvelle classe à la propriété className de l'élément. Sachant cela, vous pouvez également écrire une fonction pour supprimer une classe ultérieurement si le besoin s'en fait sentir.
la source
Pour ajouter, supprimer ou vérifier des classes d'éléments de manière simple:
la source
Vous pouvez utiliser une approche moderne similaire à jQuery
Si vous devez modifier un seul élément, le premier que JS trouvera dans DOM, vous pouvez utiliser ceci:
N'oubliez pas de laisser un espace avant le nom de la classe.
Si vous avez plusieurs classes où vous souhaitez ajouter une nouvelle classe, vous pouvez l'utiliser comme ceci
la source
Je pense qu'il vaut mieux utiliser du JavaScript pur, que nous pouvons exécuter sur le DOM du navigateur.
Voici la manière fonctionnelle de l'utiliser. J'ai utilisé ES6 mais n'hésitez pas à utiliser ES5 et l'expression de fonction ou la définition de fonction, selon ce qui convient à votre StyleGuide JavaScript.
la source
Échantillon avec JS pur. Dans le premier exemple, nous obtenons l'identifiant de notre élément et ajoutons par exemple 2 classes.
Dans le deuxième exemple, nous obtenons le nom de classe de l'élément et en ajoutons 1 de plus.
la source
Pour ceux qui utilisent Lodash et souhaitent mettre à jour la
className
chaîne:la source
tout d'abord, donnez un identifiant au div. Ensuite, appelez la fonction appendClass:
la source
indexOf
est une solution naïve et a déjà un problème signalé .Vous pouvez utiliser l'API querySelector pour sélectionner votre élément, puis créer une fonction avec l'élément et le nouveau nom de classe comme paramètres. Utilisation de classlist pour les navigateurs modernes, sinon pour IE8. Ensuite, vous pouvez appeler la fonction après un événement.
la source
Le plus court
Afficher l'extrait de code
la source
OU:
La première approche a aidé à ajouter la classe lorsque la deuxième approche n'a pas fonctionné.
N'oubliez pas de garder un espace devant le
' someclassname'
dans la première approche.Pour le retrait, vous pouvez utiliser:
la source
Ce code js fonctionne pour moi
fournit le remplacement du nom de classe
Pour ajouter, utilisez simplement
Pour supprimer l'utilisation
J'espère que cela est utile pour sombody
la source
Dans YUI, si vous incluez yuidom , vous pouvez utiliser
YAHOO.util.Dom.addClass('div1','className');
HTH
la source