J'ai une page avec quatre boutons différents et un code qui ressemble à ceci:
jQuery(".orange-button").on("click", () => {
$(this).css("color", "orange");
$(".display-img").addClass("#orange-color-image");
...
});
jQuery(".red-button").on("click", () => {
$(this).css("color", "red");
$(".display-img").addClass("#red-color-image");
...
});
jQuery(".blue-button").on("click", () => {
$(this).css("color", "blue");
$(".display-img").addClass("#blue-color-image");
...
});
...
Existe-t-il un moyen de condenser ce code? Ils font tous des choses très similaires, mais avec différentes classes et CSS appliqués.
3 Réponses :
Si ce sont tous des boutons, vous pouvez les regrouper en un seul comme suit.
jQuery('button').on('click', (event) => {
const className = this.className;
let color = '';
if (className.includes('orange-button')) {
color = 'orange';
} else if (className.includes('red-button')) {
color = 'red';
} else if (className.includes('blue-button')) {
color = 'blue';
}
$(this).css("color", color);
$(".display-img").addClass(`#${color}-color-image`);
});
Utilisez simplement une boucle:
for (const color of ["orange", "red", "blue"]) {
jQuery(`.${color}-button`).on("click", () => {
$(this).css("color", color);
$(".display-img").addClass(`#${color}-color-image`);
// ...
});
}
Ce code utilise des chaînes de modèle .
L'utilisation d'attributs de données est une pratique typique.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <button type="button" data-color="blue">blue</button> <button type="button" data-color="red">red</button> <div class="display-img">XXXXXXXX</div>
.blue-color-image {
background-color: blue;
}
.red-color-image {
background-color: red;
}jQuery("[data-color]").on("click", (evt) => {
const btn = $(evt.target);
const color = btn.data('color');
console.log('x', color);
btn.css("color", color);
$(".display-img").addClass(color + "-color-image");
});
meilleure idée est de montrer une partie html de ce ... stackoverflow.com/help/how-to-ask
Vous avez un tas de problèmes dans votre code. Vous ne pouvez pas utiliser les fonctions fléchées et
thiset vous attendre à ce que ce soit l'élément sur lequel vous avez cliqué. Vous ajoutez également un # avec une classe ??