.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, который находится под напряжением. Если бы это был массив, он был бы статичным, и не было бы никаких проблем.