Установка выбранного атрибута в списке выбора с помощью jQuery - PullRequest
53 голосов
/ 21 августа 2009

У меня есть следующий HTML:

<select id="dropdown">
    <option>A</option>
    <option>B</option>
    <option>C</option>
</select>

У меня есть строка "B", поэтому я хочу установить для нее атрибут selected, чтобы она была:

<select id="dropdown">
    <option>A</option>
    <option selected="selected">B</option>
    <option>C</option>
</select>

Как бы я это сделал в jQuery?

Ответы [ 10 ]

121 голосов
/ 21 августа 2009

Если вы не возражаете немного изменить свой HTML-код, включив в него атрибут value, вы можете значительно сократить код, необходимый для этого:

<option>B</option>

до

<option value="B">B</option>

Это будет полезно, если вы хотите сделать что-то вроде:

<option value="IL">Illinois</option>

С этим последующим jQuery внесет изменения:

$("select option[value='B']").attr("selected","selected");

Если вы решите , а не включить использование атрибута value, вам потребуется циклически просмотреть каждую опцию и вручную проверить ее значение:

$("select option").each(function(){
  if ($(this).text() == "B")
    $(this).attr("selected","selected");
});
11 голосов
/ 21 декабря 2010
<select id="cars">
<option value='volvo'>volvo</option>
<option value='bmw'>bmw</option>
<option value='fiat'>fiat</option>
</select>

var make = "fiat";

$("#cars option[value='" + make + "']").attr("selected","selected");
7 голосов
/ 25 сентября 2015

Если вы используете JQuery, начиная с версии 1.6 вы должны использовать метод .prop ():

$('select option:nth(1)').prop("selected","selected");
3 голосов
/ 21 августа 2009

Я бы перебрал опции, сравнил текст с тем, что я хочу выбрать, а затем установил выбранный атрибут для этой опции. Как только вы найдете правильный, прекратите итерацию (если у вас нет мультиселекции).

 $('#dropdown').find('option').each( function() {
      var $this = $(this);
      if ($this.text() == 'B') {
         $this.attr('selected','selected');
         return false;
      }
 });
2 голосов
/ 27 апреля 2012

Вы можете следовать стратегии .selectedIndex danielrmt, но определить индекс на основе текста в тегах опций, как это:

$('#dropdown')[0].selectedIndex = $('#dropdown option').toArray().map(jQuery.text).indexOf('B');

Это работает с исходным HTML без использования атрибутов значения.

1 голос
/ 04 декабря 2016

Это может быть решением

$(document).on('change', 'select', function () {
            var value = $(this).val();
            $(this).find('option[value="' + value + '"]').attr("selected", "selected");
        })
1 голос
/ 02 февраля 2014
$('#select_id option:eq(0)').prop('selected', 'selected');

хорошо

1 голос
/ 21 августа 2009

Код:

var select = function(dropdown, selectedValue) {
    var options = $(dropdown).find("option");
    var matches = $.grep(options,
        function(n) { return $(n).text() == selectedValue; });
    $(matches).attr("selected", "selected");
};

Пример:

select("#dropdown", "B");
1 голос
/ 21 августа 2009

Вы можете использовать чистый DOM. Смотри http://www.w3schools.com/htmldom/prop_select_selectedindex.asp

document.getElementById('dropdown').selectedIndex = 1;

но jQuery может помочь:

$('#dropdown').selectedIndex = 1;
0 голосов
/ 21 августа 2009

Нечто подобное ...

$('select option:nth(1)').attr("selected","selected"); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...