Как удалить все опции из выпадающего списка и добавить одну опцию, затем выбрать её с помощью jQuery?
Проблема: Как удалить все варианты из выпадающего списка и затем добавить один вариант и выбрать его с помощью jQuery?
У меня есть следующий выпадающий список:
<Select id="mySelect" size="9"></Select>
EDIT: Я использовал следующий код для последовательного выполнения операций. Однако, при использовании Internet Explorer метод .val('whatever')
не выбирал добавленный вариант. Я использовал одно и то же значение как в .append
, так и в .val
.
$('#mySelect').find('option').remove().end()
.append('<option value="whatever">text</option>').val('whatever');
EDIT: Я пытаюсь настроить этот код так, чтобы он срабатывал каждый раз, когда страница/форма сбрасывается. Этот выпадающий список заполняется набором радио-кнопок. Метод .focus()
оказался ближе, но вариант не появлялся как выбранный, как это делается с помощью selected = "true"
. В моем существующем коде ничего не неправильно — я просто пытаюсь понять jQuery.
var mySelect = document.getElementById('mySelect');
mySelect.options.length = 0;
mySelect.options[0] = new Option("Foo (only choice)", "Foo");
mySelect.options[0].selected = "true";
EDIT: Выбранный ответ оказался близким к тому, что мне нужно. Это сработало для меня:
$('#mySelect').children().remove().end()
.append('<option selected value="whatever">text</option>');
Но оба ответа привели меня к моему окончательному решению.
5 ответ(ов)
В вашем коде вы используете jQuery для работы с элементом select
с идентификатором mySelect
. Давайте разберём, что происходит в каждой строке:
$('#mySelect')
- выбирает элементselect
с IDmySelect
..find('option')
- находит все опции внутри этого элементаselect
..remove()
- удаляет найденные опции, тем самым очищая список..end()
- возвращает нас к предыдущему набору элементов (в данном случае, к самому элементуselect
)..append('<option value="whatever">text</option>')
- добавляет новую опцию с значениемwhatever
и текстомtext
вselect
..val('whatever')
- устанавливает значениеselect
равнымwhatever
, что выбирает только что добавленную опцию.
Таким образом, данный код очищает все существующие опции в select
, добавляет одну новую опцию и выбирает её сразу. Если вам нужно узнать что-то большее о работе с jQuery, не стесняйтесь задавать вопросы!
Этот код на jQuery очищает содержимое элемента <select>
с идентификатором mySelect
и добавляет в него новый элемент <option>
, который будет выбран по умолчанию.
Вот что делает каждая часть кода:
$('#mySelect')
- выбирает элемент<select>
с IDmySelect
..empty()
- удаляет все существующие элементы<option>
внутри этого<select>
..append('<option selected="selected" value="whatever">text</option>')
- добавляет новый элемент<option>
с атрибутомselected
, что означает, что он будет выбран по умолчанию. Значение этого элемента будетwhatever
, а текст, который будет отображаться, -text
.
Если нужна помощь с добавлением других опций или изменением значений, не стесняйтесь задавать дополнительные вопросы!
Использование простого JavaScript для очистки элементов <select>
вполне допустимо, и в вашем примере кода вы просто устанавливаете длину массива options
на 0, чтобы удалить все опции. Однако, есть некоторые нюансы, которые стоит учитывать:
Читаемость кода: Установка длины массива на 0 может быть неочевидна для других разработчиков, которые могут не сразу понять, что это приводит к очистке всех элементов
<select>
. Использование методаselect.options.length = 0
может уменьшить читаемость.Совместимость: Хотя данный способ будет работать во всех современных браузерах, существуют более семантически правильные и кроссбраузерные методы. Например, можно воспользоваться методом
remove()
для удаления конкретных опций или полностью очистить с помощью методаinnerHTML
.Производительность: В зависимости от количества опций в
<select>
, наличие большого количества удаляемых элементов может повлиять на производительность. Например, если у вас сложные элементы (с обработчиками событий и пр.), то лучше использовать методы, которые не только чистят, но и управляют состоянием элементов.Обработка событий: Если у вас имеются события, связанные с опциями, прямое изменение длины массива опций может привести к потере соответствующих обработчиков событий. Лучше обрабатывать такие ситуации более внимательно.
Если вам нужно просто очистить список, более "правильным" способом будет:
const select = document.getElementById("selectID");
while (select.options.length > 0) {
select.remove(0);
}
Такой подход более очевиден и позволяет избежать потенциальных проблем в будущем.
Если ваша цель — удалить все элементы из <select>
, кроме первого (обычно это опция "Пожалуйста, выберите элемент"), вы можете использовать следующий код:
$('#mySelect').find('option:not(:first)').remove();
Данный код использует jQuery для нахождения всех опций, кроме первой, и удаляет их из элемента <select>
с идентификатором mySelect
. Убедитесь, что jQuery подключен к вашей странице, чтобы данный код работал корректно.
У меня была ошибка в IE7 (в IE6 всё работает нормально), когда использование указанных методов jQuery очищало select в DOM, но не обновляло его на экране. С помощью инструментов для разработчиков IE я мог подтвердить, что select был очищен и содержал новые элементы, но визуально select всё ещё отображал старые элементы, хотя их нельзя было выбрать.
Решение заключалось в использовании стандартных методов/свойств DOM (как это сделал первоначальный автор), чтобы очистить select, вместо jQuery, продолжая использовать jQuery для добавления опций.
$('#mySelect')[0].options.length = 0;
jQuery: Получение текста конкретного тега option
Добавление опций в <select> с помощью jQuery?
Как перенаправить на другую веб-страницу?
Прокрутка к элементу с использованием jQuery
Как проверить радио-кнопку с помощью jQuery?