Maison > Questions et réponses > le corps du texte
Supposons que vous ayez 4 éléments, un seul d'entre eux peut avoir un nom de classeactive
. Les éléments actifs sont mis à jour plusieurs fois par seconde (voici un exemple factice).
Un moyen simple est :
active
active
sur l'élément actuellement sélectionné Le problème est que si l'élément sélectionné n'a pas changé , nous supprimons le nom de la classe et le réinitialisons-le (ce qui peut provoquer des problèmes d'affichage), ce qui n'a aucun sens.
Bien sûr, on pourrait ajouter une autre règle pour ne pas supprimer s'il s'agit toujours d'un élément sélectionné, mais le code deviendrait moins lisible.Question :
Existe-t-il un mode standard qui peut résoudre ce problème ?
var i = 0; setInterval(() => { i += 1; document.querySelectorAll('.active').forEach(item => item.classList.remove('active')); document.querySelector('#item' + Math.floor(i /4)).classList.add('active'); }, 500);
.active { color: red; }
<div id="item0" class="active">item 0</div> <div id="item1">item 1</div> <div id="item2">item 2</div> <div id="item3">item 3</div>
P粉8073979732024-04-03 15:01:32
Il semble donc que vous recherchiez une manière plus élégante d'ajouter et de supprimer une classe active pour un ensemble d'éléments. Au lieu de supprimer la classe active
de tous les éléments, puis de la rajouter à l'élément actuellement actif (active
类,然后将其添加回当前活动元素(这可能会导致潜在的问题/视觉故障)。而且似乎你正在尝试避免添加太多的代码来检查是否需要删除/添加active
cela pourrait provoquer des problèmes potentiels/des problèmes visuels). Et il semble que vous essayiez d'éviter d'ajouter trop de code pour vérifier si la classe active
doit être supprimée/ajoutée (si l'élément actif n'a pas changé
Personnellement, je ne pense pas que ce soit la meilleure approche (utiliser l'opérateur ternaire pour l'exécution de code peut être compliqué
), mais je pense que le code est assez simple et assez lisible dans l'ensemble.
active
类。 add()
函数只会在元素当前没有该类时添加类,而remove()
函数则相反(仅在类存在时删除类)。这意味着你可以在活动元素上调用add()
Fondamentalement, vous pouvez fusionner du code pour ajouter ou supprimer des
En utilisant cette logique, il nous suffit de parcourir tous les éléments possibles, puis en utilisant l'opérateur ternaireadd()
(如果活动元素没有更改,这不会有影响),否则调用remove()
, nous pouvons vérifier si un élément est l'élément actuellement actif. Si c'est le cas, appelez add()
(
), sinon appelez remove()
.
let i = 0, interval; interval = setInterval(() => { i += 1; document.querySelectorAll("[id^=item]").forEach(el => (el.id == `item${Math.floor(i / 4)}`) ? el.classList.add("active") : el.classList.remove("active")); if(i >= 24) clearInterval(interval); }, 500);
.active { color: red; }
<div id="item0" class="active">item 0</div> <div id="item1">item 1</div> <div id="item2">item 2</div> <div id="item3">item 3</div> <div id="item4">item 4</div> <div id="item5">item 5</div> <div id="item6">item 6</div>
Remarques
Cela suppose que vous pouvez parcourir tous les item
开头的id
éléments actifs