Wenn Sie versuchen, Optionen aus der Auswahl zu entfernen, bleibt immer eine übrig. Warum?
<select id="form-select">
<option>111</option>
<option>222</option>
<option>333</option>
</select>
Dieser JS funktioniert nicht:
var t = document.querySelector('#form-select');
for(var i of t.options) {
t.remove(i.index)
}
Und das funktioniert auch nicht:
for(var i of document.querySelector('#form-select').options) {
i.remove()
}
Ich weiß, dass es andere Lösungen gibt, um dies zu erreichen, aber ich würde gerne verstehen, warum es nicht so funktioniert, wie es soll
quelle
.options
ist kein Array, das die Ursache des Problems ist, sondern eine HTMLCollection, die live ist. Wäre es ein Array, wäre es statisch und es würde keine Probleme geben.HTMLOptionsCollection
Objekt verhält sich in diesem Kontext wie ein Array.Ich sehe, dass Ihr Hauptziel darin besteht, den Prozess zu verstehen, der dies verursacht. Dies sollte das Problem für Sie veranschaulichen:
Diese Schleife durchläuft genau die gleiche Art von Prozess, die Ihre "for .. of" -Schleife durchläuft, um Ihnen im Endergebnis Extras zu hinterlassen. Das Problem ist, dass es seine eigenen Indizes zerstört, während es sie durchläuft, wodurch sich der Wert ändert, auf den es
i
sich wirklich bezieht. Wenn ich mit diesem Problem konfrontiert bin, durchlaufe ich das Array gerne rückwärts, damit ich von meiner eigenen Zerstörung nicht betroffen bin.Ich hoffe, das hilft Ihnen zu verstehen, was hier gründlich vor sich geht. Wenn Sie Fragen haben, können Sie mir gerne einen Kommentar hinterlassen.
quelle
Sie durchlaufen dasselbe Array, in dem sich der Index ändert, sobald Sie das Element aus dem Array entfernen. Unten finden Sie ein Beispiel, in dem Sie Optionen ohne Index durchlaufen und aus dem Array entfernen können.
Hier ist die Geige
quelle