j'ai ce
$(".picker").click(function(e) {
var imgID = $(this).attr("data-imgID");
$('body').addClass('picker-' + imgID);
});
<span class="taPicker" data-imgID="0"></span>
<span class="taPicker" data-imgID="1"></span>
<span class="taPicker" data-imgID="2"></span>
je veux basculer entre les classes génériques sur l'élément body, par exemple si vous cliquez sur .picker je veux ajouter une classe unique à l'élément body en fonction des données -imgID attribut
Mais, comment puis-je éviter les duplications? par exemple, si vous cliquez sur un autre .picker, je veux supprimer la classe précédente et en ajouter une nouvelle
4 Réponses :
Dans votre cas, vous pouvez faire quelque chose comme ceci:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <span class="taPicker" data-imgID="0">click 0</span> <span class="taPicker" data-imgID="1">click 1</span> <span class="taPicker" data-imgID="2">click 2</span>
body.picker-0 {
background-color: pink;
}
body.picker-1 {
background-color: red;
}
body.picker-2 {
background-color: blue;
}
var selectedClass = null;
$(".taPicker").click(function(e) {
var imgID = $(this).attr("data-imgID");
$('body').addClass('picker-' + imgID);
if (selectedClass != null) {
$('body').removeClass(selectedClass);
}
selectedClass = 'picker-' + imgID;
});
Voici un violon
Juste pour signaler, le gestionnaire de clics devra être défini sur .taPicker , sinon cela ne fonctionnera pas.
Converti en extrait de code, pas besoin de violon
Vous pouvez capturer la (les) classe (s) d'origine de body dans une variable prête pour le DOM puis utiliser .removeClass () avant de rajouter la classe d'origine plus le un basé sur l'élément cliqué.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <body class="original"> <span class="taPicker" data-imgID="0">0</span> <span class="taPicker" data-imgID="1">1</span> <span class="taPicker" data-imgID="2">2</span> </body>
$(".taPicker").click(function(e) {
var imgID = $(this).attr("data-imgID");
var picker = $('body').attr("class").match(/picker-\d+/g) || [];
$('body').removeClass(picker).addClass('picker-' + imgID);
});
Il pourrait y avoir un cas où une autre classe de corps est ajoutée ailleurs, puis après le prochain clic sur sélecteur qui serait ignoré
Cela peut être fait sans ajouter de variable globale supplémentaire
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <span class="taPicker" data-imgID="0">click 0</span> <span class="taPicker" data-imgID="1">click 1</span> <span class="taPicker" data-imgID="2">click 2</span>
body.picker-0 {
background-color: pink;
}
body.picker-1 {
background-color: red;
}
body.picker-2 {
background-color: blue;
}
$(".taPicker").click(function(e) {
var imgID = $(this).attr("data-imgID");
$('body').removeClass(function() {
return (this.className.match(/picker-./g) || []).join(' ');
});
$('body').addClass('picker-' + imgID);
});
Une autre approche serait de déterminer les classes qui doivent être supprimées à chaque mise à jour ultérieure. Pour cela, vous pouvez utiliser une fonction qui analyse les classes actuelles et supprime toute classe contenant sélecteur- , avant de définir la nouvelle classe.
Voici à quoi ressemblerait le code JS: p>
function getPickerClasses(index, className) {
return className.split(' ').filter((classItem) => classItem.includes('picker-'));
}
$(".taPicker").click(function(e) {
var imgID = $(this).attr("data-imgID");
$('body').removeClass(getPickerClasses).addClass('picker-' + imgID);
});
De cette façon, avant de définir la nouvelle classe, l'ancienne est supprimée. Jetez un œil à ce violon pour voir le code en action: https://jsfiddle.net/0u24a1g3/
Utilisez la fonction remove class avec un sélecteur partiel afin de supprimer toutes les classes commençant par
picker-avant d'ajouter la nouvelle. Voir stackoverflow.com/questions/ 41832255 /…Est-ce que cela répond à votre question? jQuery removeClass wildcard
@GillesC ne pense pas que vous pouvez utiliser un caractère générique avec
.removeClass- le lien que vous avez fourni est pour un sélecteur, pas un argument pour removeClass - vous pouvez cependant utiliser une fonction comme indiqué ici: < a href = "https://stackoverflow.com/questions/2644299/jquery-removeclass-wildcard"> jQuery removeClass wildcard (le principe est donc le même)@ Freedomn-m Oui, je ne peux pas utiliser de joker, je n'ai pas utilisé jQuery depuis plus de 10 ans, donc je devrais d'abord vérifier la documentation. Mais il ne prend pas seulement la fonction non plus, il peut également prendre une liste de classes sous forme de chaîne ou de tableau.