Jusqu'à présent, je dois faire ceci:
elem.classList.add("first");
elem.classList.add("second");
elem.classList.add("third");
Bien que cela soit faisable dans jQuery, comme ceci
$(elem).addClass("first second third");
J'aimerais savoir s'il existe un moyen natif d'ajouter ou de supprimer.
javascript
html
Tente Enrique Moreno
la source
la source
Le nouvel opérateur de diffusion facilite encore l'application de plusieurs classes CSS en tant que tableau:
la source
DOMTokenList
au lieu d'un tableau? Je sais qu'un DOMTokenList est un objet de type tableau. Il est donc possible de l'utiliser avec laclassList.add()
méthode ou faut-il convertir le DOMTokenList en un vrai tableau?La
classList
propriété garantit que les classes dupliquées ne sont pas inutilement ajoutées à l'élément. Afin de conserver cette fonctionnalité, si vous n'aimez pas les versions longues ou la version jQuery, je vous suggère d'ajouter uneaddMany
fonction etremoveMany
àDOMTokenList
(le type declassList
):Ceux-ci seraient alors utilisables comme ceci:
Mettre à jour
Selon vos commentaires, si vous souhaitez écrire une méthode personnalisée pour ceux-ci uniquement dans le cas où ils ne sont pas définis, essayez ce qui suit:
la source
Puisque la
add()
méthode declassList
just permet de passer des arguments séparés et non un seul tableau, vous devez invoquer enadd()
utilisant apply. Pour le premier argument, vous devrez passer laclassList
référence du même nœud DOM et comme second argument le tableau de classes que vous souhaitez ajouter:la source
Pour ajouter une classe à un élément
Supprimer une classe
la source
className
. C'est terrible pour les performances (même récupérer sa valeur provoque une redistribution).Les versions plus récentes de la spécification DOMTokenList autorisent plusieurs arguments pour
add()
etremove()
, ainsi qu'un deuxième argumenttoggle()
pour forcer l'état.Au moment de la rédaction de cet article, Chrome prend en charge plusieurs arguments pour
add()
etremove()
, mais aucun des autres navigateurs ne le fait. IE 10 et inférieur, Firefox 23 et inférieur, Chrome 23 et inférieur et les autres navigateurs ne prennent pas en charge le deuxième argument detoggle()
.J'ai écrit le petit polyfill suivant pour me guider jusqu'à ce que le support se développe:
Un navigateur moderne conforme à ES5
DOMTokenList
est attendu, mais j'utilise ce polyfill dans plusieurs environnements spécifiquement ciblés, donc cela fonctionne très bien pour moi, mais il faudra peut-être peaufiner les scripts qui fonctionneront dans les environnements de navigateur hérités tels que IE 8 et les versions antérieures .la source
Vous pouvez faire comme ci-dessous
Ajouter
Retirer
Référence
TLDR;
Dans le cas simple ci-dessus, la suppression devrait fonctionner. Mais en cas de suppression, vous devez vous assurer que la classe existe avant de les supprimer
la source
Voici un travail autour des utilisateurs d'IE 10 et 11 qui semblait assez simple.
Ou
la source
La définition standard permet uniquement d'ajouter ou de supprimer une seule classe. Quelques petites fonctions de wrapper peuvent faire ce que vous demandez:
Ces wrappers vous permettent de spécifier la liste des classes en tant qu'arguments séparés, sous forme de chaînes avec des éléments séparés par des espaces ou des virgules, ou une combinaison. Pour un exemple, voir http://jsfiddle.net/jstoolsmith/eCqy7
la source
Une solution très simple, non sophistiquée, mais fonctionnelle que je devrais croire est très multi-navigateur:
Créer cette fonction
Appelez-le comme ceci: removeAddClasses (node.classList, arrayToRemove, arrayToAdd);
... où arrayToRemove est un tableau de noms de classes à supprimer: ['myClass1', 'myClass2'] etcetera
... et arrayToAdd est un tableau de noms de classes à ajouter: ['myClass3', 'myClass4'] etcetera
la source
Supposons que vous ayez un tableau de classes à ajouter, vous pouvez utiliser la syntaxe de diffusion ES6:
let classes = ['first', 'second', 'third']; elem.classList.add(...classes);
la source
J'ai aimé la réponse de @ rich.kelly, mais je voulais utiliser la même nomenclature que
classList.add()
(chaînes séparées par des virgules), donc un léger écart.Vous pouvez donc utiliser:
Je dois tester tous les navigateurs, mais cela a fonctionné pour Chrome.
Devrions-nous vérifier quelque chose de plus spécifique que l'existence de
DOMTokenList.prototype.addMany
? Quelles sont exactement les causesclassList.add()
de l'échec dans IE11?la source
Un autre polyfill pour
element.classList
est ici . Je l'ai trouvé via MDN .J'inclus ce script et je l'utilise
element.classList.add("first","second","third")
comme prévu.la source