Задать вопрос
@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>
  • Вопрос задан
  • 352 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 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' ];

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

[...selectEl].forEach(n => values.includes(n.value) && n.remove());

или

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

или

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

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

Похожие вопросы