.optionsКолекція (на жаль) в прямому ефірі , так що ітерація елементи живої колекції в один-на-один і .removeІНГ кожен призведе до кожної непарної тримається. (Наприклад, коли ви видалите перший елемент, цей [0]елемент колекції одразу стане наступним елементом у колекції - тим, що раніше було [1], стане [0](а потім, коли ви перейдете до наступного індексу на [1], новий елемент у позиції) 0 не буде повторено)
Використовуйте document.querySelectorAllнатомість, що повертає статичну колекцію:
for (const option of document.querySelectorAll('#form-select > option')) {
option.remove();
}
<select id="form-select">
<option>111</option>
<option>222</option>
<option>333</option>
</select>
Ви також можете поширити в (статичний) масив перед видаленням елементів ::
for (const option of [...document.querySelector('#form-select').options]) {
option.remove();
}
<select id="form-select">
<option>111</option>
<option>222</option>
<option>333</option>
</select>
Інший варіант , який як раз трапляється до роботи , тому що колекція живий (але , ймовірно , не слід використовувати, так як це не інтуїтивно):
const { options } = document.querySelector('#form-select');
while (options.length) {
options[0].remove();
}
<select id="form-select">
<option>111</option>
<option>222</option>
<option>333</option>
</select>
.optionsЦе НЕ масив, який є джерелом проблеми - швидше, що це HTMLCollection, який знаходиться під напругою. Якби це масив, він був би статичним, і проблем не було б.