Как скрыть некоторые option у тега select на чистом JS

282
05 марта 2021, 18:20

У меня есть тег select с тегами option

<select id="vid" name="vid[]">
    <option value="1">Мелкая собака</option>
    <option value="2">Средняя собака</option>
    <option value="3">Крупная собака</option>
    <option value="4">Кошка</option>
    <option value="6">Мелкий грызун</option>
    <option value="7">Крупный грызун</option>
    <option value="8">Мелкая птица</option>
    <option value="9">Крупная птица</option>
    <option value="10">Хорек</option>
    <option value="11">Енот</option>
    <option value="12">Минипиг</option>
    <option value="13">Аквариумные рыбки</option>
</select>

Как лучше на чистом JS скрыть все элементы option кроме первых трех?

Answer 1

Сначала нужно вытащить все элементы, связанные с этим select'ом - document.getElementById()

Дальше - вытащить все элементы option внутри этого select'a - document.getElementsByTagName().

Теперь у нас есть список (массив) элементов, над которыми нужно произвести какие-либо действия. Собственно строка let optionList = document.getElementById('vid').getElementsByTagName('option'); получает все элементы.

Дальше в цикле просто проставляем им style="display:none;"

<script>
    let optionList = document.getElementById('vid').getElementsByTagName('option');
    for (i = 0; i < optionList.length; i++) {
        if (i > 2) {
            optionList[i].setAttribute('style', 'display:none;')
        }
    }
</script>
Answer 2

Хоть в вопросу и написано про js, я считаю это перебор.

Предлагаю все таки делать это через css:

#vid option:nth-child(n+4) { 
  display: none; 
}
<select id="vid" name="vid[]"> 
    <option value="1">Мелкая собака</option> 
    <option value="2">Средняя собака</option> 
    <option value="3">Крупная собака</option> 
    <option value="4">Кошка</option> 
    <option value="6">Мелкий грызун</option> 
</select>

PS: если надо оставить каких-то конкретных животных тогда уже лучше использовать js (определять по содержимому)

Answer 3
var option = document.querySelectorAll('option');
  for (let i = 0; i < option.length; i++) {
    if (i > 2) {
      option[i].style.display = 'none';
    }
  }
READ ALSO
Не могу подключиться к postgresql в react приложении с помощью пакета &#39;pg&#39; (node-postgres)

Не могу подключиться к postgresql в react приложении с помощью пакета 'pg' (node-postgres)

Задача: подключить БД Postgresql 11 к проекту на React для получения оттуда данныхНе могу найти документацию, соответствующую реальности или примеры...

120
Пакеты NPM и VK

Пакеты NPM и VK

Как установить пакет ни по инструкциям в документации VK, ни по инструкциям документации NPM и ни по инструкциям интернета так и не удалосьА...

317
Maximum call stack size exceeded

Maximum call stack size exceeded

При выполнении кода вылетает данная ошибка, не понимаю почему

109
Убрать пробелы и добавить тире после слова

Убрать пробелы и добавить тире после слова

Как с помощью регулярки сделать из этого CA - Los Angeles вот это CA-Los-Angeles?

153