Задать вопрос
@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>
  • Вопрос задан
  • 363 просмотра
Подписаться 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
Кого надо удалить: const values = [ '1', '2', '3' ];.

Удаляем:

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

или

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

или

Array.prototype.reduceRight.call(
  select.options,
  (_, n) => ~values.indexOf(n.value) && (n.outerHTML = ''),
  null
);

или

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

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

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