12

Как удалить все опции из выпадающего списка и добавить одну опцию, затем выбрать её с помощью jQuery?

11

Проблема: Как удалить все варианты из выпадающего списка и затем добавить один вариант и выбрать его с помощью 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 ответ(ов)

18

В вашем коде вы используете jQuery для работы с элементом select с идентификатором mySelect. Давайте разберём, что происходит в каждой строке:

  1. $('#mySelect') - выбирает элемент select с ID mySelect.
  2. .find('option') - находит все опции внутри этого элемента select.
  3. .remove() - удаляет найденные опции, тем самым очищая список.
  4. .end() - возвращает нас к предыдущему набору элементов (в данном случае, к самому элементу select).
  5. .append('<option value="whatever">text</option>') - добавляет новую опцию с значением whatever и текстом text в select.
  6. .val('whatever') - устанавливает значение select равным whatever, что выбирает только что добавленную опцию.

Таким образом, данный код очищает все существующие опции в select, добавляет одну новую опцию и выбирает её сразу. Если вам нужно узнать что-то большее о работе с jQuery, не стесняйтесь задавать вопросы!

8

Этот код на jQuery очищает содержимое элемента <select> с идентификатором mySelect и добавляет в него новый элемент <option>, который будет выбран по умолчанию.

Вот что делает каждая часть кода:

  1. $('#mySelect') - выбирает элемент <select> с ID mySelect.
  2. .empty() - удаляет все существующие элементы <option> внутри этого <select>.
  3. .append('<option selected="selected" value="whatever">text</option>') - добавляет новый элемент <option> с атрибутом selected, что означает, что он будет выбран по умолчанию. Значение этого элемента будет whatever, а текст, который будет отображаться, - text.

Если нужна помощь с добавлением других опций или изменением значений, не стесняйтесь задавать дополнительные вопросы!

1

Использование простого JavaScript для очистки элементов <select> вполне допустимо, и в вашем примере кода вы просто устанавливаете длину массива options на 0, чтобы удалить все опции. Однако, есть некоторые нюансы, которые стоит учитывать:

  1. Читаемость кода: Установка длины массива на 0 может быть неочевидна для других разработчиков, которые могут не сразу понять, что это приводит к очистке всех элементов <select>. Использование метода select.options.length = 0 может уменьшить читаемость.

  2. Совместимость: Хотя данный способ будет работать во всех современных браузерах, существуют более семантически правильные и кроссбраузерные методы. Например, можно воспользоваться методом remove() для удаления конкретных опций или полностью очистить с помощью метода innerHTML.

  3. Производительность: В зависимости от количества опций в <select>, наличие большого количества удаляемых элементов может повлиять на производительность. Например, если у вас сложные элементы (с обработчиками событий и пр.), то лучше использовать методы, которые не только чистят, но и управляют состоянием элементов.

  4. Обработка событий: Если у вас имеются события, связанные с опциями, прямое изменение длины массива опций может привести к потере соответствующих обработчиков событий. Лучше обрабатывать такие ситуации более внимательно.

Если вам нужно просто очистить список, более "правильным" способом будет:

const select = document.getElementById("selectID");
while (select.options.length > 0) {
    select.remove(0);
}

Такой подход более очевиден и позволяет избежать потенциальных проблем в будущем.

1

Если ваша цель — удалить все элементы из <select>, кроме первого (обычно это опция "Пожалуйста, выберите элемент"), вы можете использовать следующий код:

$('#mySelect').find('option:not(:first)').remove();

Данный код использует jQuery для нахождения всех опций, кроме первой, и удаляет их из элемента <select> с идентификатором mySelect. Убедитесь, что jQuery подключен к вашей странице, чтобы данный код работал корректно.

0

У меня была ошибка в IE7 (в IE6 всё работает нормально), когда использование указанных методов jQuery очищало select в DOM, но не обновляло его на экране. С помощью инструментов для разработчиков IE я мог подтвердить, что select был очищен и содержал новые элементы, но визуально select всё ещё отображал старые элементы, хотя их нельзя было выбрать.

Решение заключалось в использовании стандартных методов/свойств DOM (как это сделал первоначальный автор), чтобы очистить select, вместо jQuery, продолжая использовать jQuery для добавления опций.

$('#mySelect')[0].options.length = 0;
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь