Как удалить все опции из выпадающего списка и добавить одну опцию, затем выбрать её с помощью 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
Как определить нажатие клавиши Esc?
Как выполнить код после сброса HTML-формы с помощью jQuery?