Cela peut sembler une question très simple, mais j'ai beaucoup de mal à essayer de le faire fonctionner.Supprimer la classe surclic quoi que ce soit d'autre
J'ai une série d'éléments répartis sur différentes parties d'une page.
<span class="click-element"><span>
---
<span class="click-element"><span>
--
<span class="click-element"><span>
Je veux passer une classe (« active ») on/off sur chacun d'eux quand ils sont cliqués individuellement, cela devrait également supprimer la classe de tous les autres.
Pour ce faire, ma fonction ressemble à ceci:
var targets = document.querySelectorAll('.click-element');
for (i = 0; i < targets.length; i++) {
targets[i].addEventListener('click', function() {
var clicked = this;
if (this.classList.contains("active")) {
[].forEach.call(targets, function (a) {a.classList['remove']('active');});
}
else {
[].forEach.call(targets, function (a) {a.classList[a == clicked ? 'add' : 'remove']('active');});
}
});
}
Mais ce que je suis en train de faire, est alors enlever la classe quand tout le reste est cliqué dans le document:
document.addEventListener('click', function() {
document.querySelector('.click-element.active').classList.remove("active");
});
Cependant, le problème que j'ai est que le deuxième événement semble juste remplacer le premier. Comment puis-je réparer cela? Ou y a-t-il une approche plus propre pour faire ce que je veux?
Pas jQuery grâce
Vous souhaitez appliquer/supprimer une classe sur l'ensemble de l'élément à la fois ou un par un (c'est-à-dire l'élément sur lequel vous cliquez pour basculer la classe)? – robieee