Lorsque vous essayez de supprimer des options de la sélection, il en reste toujours une, pourquoi?
<select id="form-select">
<option>111</option>
<option>222</option>
<option>333</option>
</select>
Ce JS ne fonctionne pas:
var t = document.querySelector('#form-select');
for(var i of t.options) {
t.remove(i.index)
}
Et cela ne fonctionne pas aussi:
for(var i of document.querySelector('#form-select').options) {
i.remove()
}
Je sais qu'il existe d'autres solutions pour y parvenir, mais j'aimerais comprendre pourquoi cela ne fonctionne pas comme il le devrait
la source
.options
n'est pas un tableau, qui est la source du problème - c'est plutôt un HTMLCollection, qui est en direct. S'il s'agissait d'un tableau, il serait statique et il n'y aurait aucun problème.HTMLOptionsCollection
objet agit dans ce contexte comme un tableau.Je vois que votre objectif principal est de comprendre le processus qui fait que cela se produit, donc cela devrait illustrer le problème pour vous:
Cette boucle passe par exactement le même type de processus que votre boucle "for .. of" passe pour vous laisser des extras dans le résultat final. Le problème est qu'il détruit ses propres indices en itérant à travers eux, changeant ainsi la valeur à laquelle il
i
fait vraiment référence. Lorsque je suis confronté à ce problème, j'aime parcourir le tableau en arrière, donc je ne suis pas affecté par ma propre destruction, comme ceci:J'espère que cela vous aidera à bien comprendre ce qui se passe ici. Si vous avez des questions, n'hésitez pas à me laisser un commentaire.
la source
Vous parcourez le même tableau où l'index change une fois que vous avez supprimé l'élément du tableau. Voici l'exemple où vous pouvez parcourir les options sans index et le supprimer du tableau.
Voici le violon
la source