Как выбрать конкретную опцию в элементе SELECT в jQuery? - PullRequest
653 голосов
/ 24 ноября 2008

Если вы знаете индекс, значение или текст. также если у вас нет идентификатора для прямой ссылки.

Это , это и это - все полезные ответы.

Пример разметки

<div class="selDiv">
  <select class="opts">
    <option selected value="DEFAULT">Default</option>
    <option value="SEL1">Selection 1</option>
    <option value="SEL2">Selection 2</option>
  </select>
</div>

Ответы [ 19 ]

1121 голосов
/ 20 мая 2011

Селектор для получения среднего опционного элемента по значению:

$('.selDiv option[value="SEL1"]')

Для индекса:

$('.selDiv option:eq(1)')

Для известного текста:

$('.selDiv option:contains("Selection 1")')

РЕДАКТИРОВАТЬ : Как указано выше, OP мог быть после изменения выбранного элемента в раскрывающемся списке. В версии 1.6 и выше рекомендуется метод prop ():

$('.selDiv option:eq(1)').prop('selected', true)

В старых версиях:

$('.selDiv option:eq(1)').attr('selected', 'selected')

EDIT2 : после комментария Райана. Совпадение по «выбору 10» может быть нежелательным. Я не нашел селектор , который соответствовал бы полному тексту, но фильтр работает:

 $('.selDiv option')
    .filter(function(i, e) { return $(e).text() == "Selection 1"})

EDIT3 : Будьте осторожны с $(e).text(), так как он может содержать символ новой строки, что делает сравнение неудачным. Это происходит, когда параметры неявно закрыты (без тега </option>):

<select ...>
<option value="1">Selection 1
<option value="2">Selection 2
   :
</select>

Если вы просто используете e.text, все лишние пробелы, такие как завершающий символ новой строки, будут удалены, что сделает сравнение более надежным.

114 голосов
/ 01 декабря 2011

Ни один из вышеперечисленных методов не предоставил мне нужного решения, поэтому я решил, что предоставлю то, что мне подходит.

$('#element option[value="no"]').attr("selected", "selected");
75 голосов
/ 02 декабря 2009

Вы можете просто использовать val() метод:

$('select').val('the_value');
49 голосов
/ 07 мая 2013

По значению, то, что у меня работало с jQuery 1.7 , было кодом ниже, попробуйте это:

$('#id option[value=theOptionValue]').prop('selected', 'selected').change();
12 голосов
/ 06 сентября 2016

Есть несколько способов сделать это, но самый чистый подход был потерян среди топовых ответов и множества аргументов за val(). Также некоторые методы изменились с jQuery 1.6, поэтому это требует обновления.

В следующих примерах я предполагаю, что переменная $select является объектом jQuery, указывающим на желаемый тег <select>, например, через следующее:

var $select = $('.selDiv .opts');

Примечание 1 - используйте val () для совпадений значений:

Для сопоставления значений использование val() намного проще, чем использование селектора атрибута: https://jsfiddle.net/yz7tu49b/6/

$select.val("SEL2");

Установочная версия .val() реализована для тегов select путем установки свойства selected соответствующего option с тем же value, поэтому прекрасно работает во всех современных браузерах.

Примечание 2 - использовать prop ('selected', true):

Если вы хотите установить выбранное состояние опции напрямую, вы можете использовать prop (не attr) с параметром boolean (вместо текстового значения selected):

например. https://jsfiddle.net/yz7tu49b/

$option.prop('selected', true);  // Will add selected="selected" to the tag

Примечание 3 - допускаются неизвестные значения:

Если вы используете val() для выбора <option>, но значение val не совпадает (может произойти в зависимости от источника значений), тогда выбирается «ничего» и $select.val() вернет null.

Итак, для показанного примера и ради надежности вы можете использовать что-то вроде этого https://jsfiddle.net/1250Ldqn/:

var $select = $('.selDiv .opts');
$select.val("SEL2");
if ($select.val() == null) {
  $select.val("DEFAULT");
}

Примечание 4 - точное совпадение текста:

Если вы хотите сопоставить по точному тексту, вы можете использовать filter с функцией. например https://jsfiddle.net/yz7tu49b/2/:

var $select = $('.selDiv .opts');
$select.children().filter(function(){
    return this.text == "Selection 2";
}).prop('selected', true);

хотя, если у вас могут быть лишние пробелы, вы можете добавить обрезку к чеку, как в

    return $.trim(this.text) == "some value to match";

Примечание 5 - совпадение по индексу

Если вы хотите сопоставить по индексу, просто проиндексируйте дочерние элементы, например, например. https://jsfiddle.net/yz7tu49b/3/

var $select = $('.selDiv .opts');
var index = 2;
$select.children()[index].selected = true;

Хотя в настоящее время я склоняюсь к тому, чтобы избегать прямых свойств DOM в пользу jQuery, к коду, ориентированному на будущее, так что это также можно сделать как https://jsfiddle.net/yz7tu49b/5/:

var $select = $('.selDiv .opts');
var index = 2;
$select.children().eq(index).prop('selected', true);

Примечание 6 - используйте change () для запуска нового выбора

Во всех вышеперечисленных случаях событие изменения не срабатывает. Это сделано для того, чтобы вы не сталкивались с событиями рекурсивных изменений.

Чтобы сгенерировать событие изменения, если необходимо, просто добавьте вызов к .change() объекту jQuery select. например самый первый самый простой пример становится https://jsfiddle.net/yz7tu49b/7/

var $select = $('.selDiv .opts');
$select.val("SEL2").change();

Существует также множество других способов поиска элементов с помощью селекторов атрибутов, например [value="SEL2"], но вы должны помнить, что селекторы атрибутов относительно медленны по сравнению со всеми этими другими опциями.

12 голосов
/ 01 февраля 2012

Вы можете назвать имя и использовать это:

$("select[name='theNameYouChose']").find("option[value='theValueYouWantSelected']").attr("selected",true);

Следует выбрать нужный вариант.

11 голосов
/ 16 декабря 2014
   $(elem).find('option[value="' + value + '"]').attr("selected", "selected");
9 голосов
/ 24 ноября 2008

Отвечая на мой собственный вопрос для документации. Я уверен, что есть другие способы сделать это, но это работает, и этот код проверен.

<html>
<head>
<script language="Javascript" src="javascript/jquery-1.2.6.min.js"></script>
<script type="text/JavaScript">

$(function() {
    $(".update").bind("click",      // bind the click event to a div
        function() {
            var selectOption = $('.selDiv').children('.opts') ;
            var _this = $(this).next().children(".opts") ;

            $(selectOption).find("option[index='0']").attr("selected","selected");
//          $(selectOption).find("option[value='DEFAULT']").attr("selected","selected");
//          $(selectOption).find("option[text='Default']").attr("selected","selected");


//          $(_this).find("option[value='DEFAULT']").attr("selected","selected");
//          $(_this).find("option[text='Default']").attr("selected","selected");
//          $(_this).find("option[index='0']").attr("selected","selected");

    }); // END Bind
}); // End eventlistener

</script>
</head>
<body>
<div class="update" style="height:50px; color:blue; cursor:pointer;">Update</div>
<div class="selDiv">
        <select class="opts">
            <option selected value="DEFAULT">Default</option>
            <option value="SEL1">Selection 1</option>
            <option value="SEL2">Selection 2</option>
        </select>
    </div>
</body>
</html>
8 голосов
/ 05 января 2016

Используя jquery-2.1.4 , я нашел следующий ответ для меня:

$('#MySelectionBox').val(123).change();

Если у вас есть строковое значение, попробуйте следующее:

$('#MySelectionBox').val("extra thing").change();

Другие примеры не помогли мне, поэтому я добавляю этот ответ.

Я нашел оригинальный ответ по адресу: https://forum.jquery.com/topic/how-to-dynamically-select-option-in-dropdown-menu

6 голосов
/ 06 июня 2017

Для установки выберите значение при выбранном запуске:

$('select.opts').val('SEL1').change();

Для настройки параметра из области:

$('.selDiv option[value="SEL1"]')
    .attr('selected', 'selected')
    .change();

Этот код использует селектор, чтобы выяснить объект выбора с условием, а затем изменить выбранный атрибут на attr().


Кроме того, я рекомендую добавить событие change() после установки атрибута в selected, при этом код будет близок к изменению, выбранному пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...