@eldgammel

Как удалить option'ы с определёнными значениями?

Как удалить из select все option, чей value равен 1, 2 или 3?

<select id="delete">
  <option value="1">1</option>
  <option value="1">1</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="2">2</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="3">3</option>
  <option value="3">3</option>
  <option value="3">3</option>
</select>
  • Вопрос задан
  • 329 просмотров
Решения вопроса 2
@eldgammel Автор вопроса
Сам нашел ответ
for(let i of document.querySelectorAll("select")) {
  for(let n of i.querySelectorAll("option")) {
    if(n.getAttribute("value") == 1) {
      n.remove();
    } else if(n.getAttribute("value") == 2) {
      n.remove(); 
    } else if(n.getAttribute("value") == 3) {
      n.remove();
    }
  }
}
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
Первым делом надо сложить значения удаляемых option'ов в массив:

const values = [ '1', '2', '3' ];

Дальше возможны варианты:

Array
  .from(selectEl.options)
  .forEach(n => values.includes(n.value) && n.remove());

или

selectEl
  .querySelectorAll(values.map(n => `[value="${n}"]`))
  .forEach(n => selectEl.removeChild(n));

или

for (const n of [...selectEl.children]) {
  if (values.indexOf(n.value) !== -1) {
    n.outerHTML = '';
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
OCTAGRAM
@OCTAGRAM
Можно обходить всех children тега select. Обходить лучше с конца, ведь результат children — массивоподобная штука, обновляющаяся автоматом. Если мы идём в цикле по индексам вперёд и удаляем, то начинаем пропускать. Как вариант, идти вперёд, но после удаления индекс не инкрементировать. Или декрементировать, чтоб на следующей итерации инкремент вернул как было. Или заранее чем-нибудь вроде Array.prototype.slice.call превратить массивоподобный children в настоящий массив, и там уже с этим неживым снимком поработать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект