Ketika mencoba untuk menghapus opsi dari pilih, selalu ada satu yang tersisa, mengapa?
<select id="form-select">
<option>111</option>
<option>222</option>
<option>333</option>
</select>
JS ini tidak berfungsi:
var t = document.querySelector('#form-select');
for(var i of t.options) {
t.remove(i.index)
}
Dan ini juga tidak berfungsi:
for(var i of document.querySelector('#form-select').options) {
i.remove()
}
Saya tahu bahwa ada solusi lain untuk mencapai itu, tetapi saya ingin memahami mengapa itu tidak berfungsi sebagaimana mestinya
sumber
.options
adalah tidak array, yang merupakan sumber masalah - bukan, ini merupakan HTMLCollection, yang hidup. Apakah itu array, itu akan menjadi statis, dan tidak akan ada masalah.HTMLOptionsCollection
objek bertindak dalam konteks ini seperti sebuah array.Saya melihat bahwa tujuan utama Anda adalah untuk memahami proses yang menyebabkan ini terjadi, jadi ini harus menggambarkan masalah bagi Anda:
Loop ini melewati jenis proses yang sama persis dengan loop "for .. of" Anda untuk memberi Anda tambahan dalam hasil akhir. Masalahnya adalah bahwa ia menghancurkan indeks sendiri karena iterasi melalui mereka, sehingga mengubah nilai yang
i
benar-benar merujuk. Ketika saya sedang menghadapi masalah ini, saya seperti loop melalui array mundur jadi saya tidak terpengaruh oleh kerusakan saya sendiri, seperti:Saya harap ini membantu Anda memahami apa yang terjadi di sini secara menyeluruh. Jika Anda memiliki pertanyaan, silakan beri saya komentar.
sumber
Anda mengulang melalui array yang sama di mana indeks berubah setelah Anda menghapus item dari array. Di bawah ini adalah contoh di mana Anda dapat mengulang melalui opsi tanpa indeks dan menghapusnya dari array.
Ini biola
sumber