Получить список значений из выпадающего списка, которые НЕ выбраны с помощью jquery

#jquery #drop-down-menu

#jquery ( jquery ) #выпадающее меню

Вопрос:

У меня есть два связанных выпадающих списка.

Когда пользователь выбирает опцию из первого выпадающего списка, второй выпадающий список заполняется списком всех опций из первого выпадающего списка, которые НЕ были выбраны.

Я пытаюсь использовать jquery, чтобы получить все не выбранные параметры, но я все еще новичок в jquery и, должно быть, что-то не так.

Я пытаюсь выполнить следующее:

 $('#segmentCrossStreet1:not(:selected)')
 

Здесь «segmentCrossStreet1» — это идентификатор первого выпадающего списка. Похоже, это не возвращает ничего полезного. Что я делаю не так?

Комментарии:

1. Является ли ваш выпадающий список элементом HTML или пользовательским с помощью JS и тому подобного? Было бы неплохо, если бы вы опубликовали свою структуру HTML.

2. Выпадающий список — это простой HTML-элемент, не созданный на заказ с помощью JS. Я заполняю его с помощью AJAX и jquery, но в остальном он статичен на странице.

Ответ №1:

Скрипка: http://jsfiddle.net/uzhWS / (эта скрипка также показывает , как окуклить другую <select> )

Вы должны выбрать <option> элементы, а не «выбранные <select> » элементы:

 $('#segmentCrossStreet1 option:not(:selected)');
 

Комментарии:

1. Это определенно улучшение, но все же дает мне все параметры из списка?

2. @AmandaMyer Нажмите на скрипку и внимательно посмотрите на цифры. Когда вы выберете «Тест 2», вы не сможете найти Test 2 во втором <select> .

3. Ах, извините.. моя ошибка. Теперь я вижу, что он делает. Спасибо за пример. =)

4. Обратите внимание, что .clone() используется ранее .appendTo . Если вы опустите clone , параметры исчезнут из оригинала <select> .

Ответ №2:

Ваш текущий селектор:

 $('#segmentCrossStreet1:not(:selected)')
 

Выполняет поиск всех #segmentCrossStreet1 элементов, которые не выбраны. Это то, чего ты хочешь? Я сомневаюсь в этом. Добавьте пробел перед :not( поиском дочерних элементов:

 $('#segmentCrossStreet1: not(:selected)')
 

Лучше, если вы сделали его более конкретным:

 $('#segmentCrossStreet1: option:not(:selected)')
 

Комментарии:

1. Хотел бы я выбрать два ответа! Я выбрал Rob W, потому что он был первым, но ваш работает так же хорошо. Спасибо. =)

2. Не думайте, что я плачу в углу, потому что мой ответ не был принят 😉