Добавление параметров в <select> с помощью jQuery?

739

Какой самый простой способ добавить optionвыпадающий список с помощью jQuery?

Будет ли это работать?

$("#mySelect").append('<option value=1>My option</option>');
Нажмите Upvote
источник
26
Или используйте, $("#mySelect").html(....)чтобы заменить текущие параметры новыми.
Дэн Дипл

Ответы:

267

Это не сработало в IE8 (но в FF):

$("#selectList").append(new Option("option text", "value"));

Это ДЕЙСТВИТЕЛЬНО работает:

var o = new Option("option text", "value");
/// jquerify the DOM object 'o' so we can use the html method
$(o).html("option text");
$("#selectList").append(o);
мистифицировать
источник
1
У меня были проблемы с IE8, но ваш код работал на меня, спасибо!
Александр Л Теллес
Также убедитесь, что display: table;это НЕ применяется как стиль к элементу select. Это сломает JS-код
Гандон
1
Если вам интересно, вот ошибка, связанная с тем, что Options не работает с append (), работает в FireFox, Chrome, но не в IE: bugs.jquery.com/ticket/1641
JackDev
2
+1 - работал для меня без необходимости «ставить под сомнение» объект. var o = new Option('option text', 'value'); o.innerHTML = 'option text'; document.getElementById('selectList').appendChild(o);
Aust
Есть способ добавить значения «data-xxx» к этому?
Педро Хоакин
817

Лично я предпочитаю этот синтаксис для добавления параметров:

$('#mySelect').append($('<option>', {
    value: 1,
    text: 'My option'
}));

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

$.each(items, function (i, item) {
    $('#mySelect').append($('<option>', { 
        value: item.value,
        text : item.text 
    }));
});
Dule
источник
23
это будет довольно медленно, если вы добавляете много опций, по сравнению с созданием HTML-строки и добавлением ее
Click Upvote
3
Работает в IE в отличие от многих решений
DancesWithBamboo
3
@Ropitems={option1:{value:1,text:1},option2:{value:2,text:2}}
gamliela
4
спасибо @dule, но как я могу сделать новую опцию выбранной по умолчанию?
Lord_JABA
11
{selected: true}
jmadsen
115

Вы можете добавить опцию, используя следующий синтаксис, также вы можете посетить опцию way handle в jQuery для более подробной информации.

  1. $('#select').append($('<option>', {value:1, text:'One'}));

  2. $('#select').append('<option value="1">One</option>');

  3. var option = new Option(text, value); $('#select').append($(option));

Dipu
источник
1
первый должен измениться на $ ("# SectionNames"). append ($ ('<option>', {value: 1, text: "one"})
EthenHY
1
Второй имеет неверный атрибут в теге option ( valueвместо val). Правильный код должен быть$('select').append('<option value="1">One</option>');
todd
Спасибо Дипу :))
Фокс
45

Если имя или значение параметра является динамическим, вам не нужно беспокоиться о экранировании специальных символов в нем; в этом вы можете предпочесть простые методы DOM:

var s= document.getElementById('mySelect');
s.options[s.options.length]= new Option('My option', '1');
bobince
источник
1
Не выглядит так просто для меня!
Нажмите Upvote
27
Это просто в терминах javascript, jquery сделал вещи слишком простыми для людей
DWolf
document.getElementById ('mySelect'). add (new Option ('My option', '1')); // если IE8 или лучше
Hafthor
34

Опция 1-

Вы можете попробовать это

$('#selectID').append($('<option>',
 {
    value: value_variable,
    text : text_variable
}));

Нравится-

for (i = 0; i < 10; i++)
{ 
     $('#mySelect').append($('<option>',
     {
        value: i,
        text : "Option "+i 
    }));
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<select id='mySelect'></select>

Вариант 2-

Или попробуйте это

$('#selectID').append( '<option value="'+value_variable+'">'+text_variable+'</option>' );

Нравится-

for (i = 0; i < 10; i++)
{ 
     $('#mySelect').append( '<option value="'+i+'">'+'Option '+i+'</option>' );
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<select id='mySelect'></select>

Абрар Джахин
источник
20

Это очень просто:

$('#select_id').append('<option value="five" selected="selected">Five</option>');

или

$('#select_id').append($('<option>', {
                    value: 1,
                    text: 'One'
                }));
Есуус есуус
источник
18

Это хорошо работает.

Если добавляется более одного элемента option, я рекомендую выполнить добавление один раз, а не добавлять его для каждого элемента.

Русь Кэм
источник
18

по какой-то причине $("#myselect").append(new Option("text", "text")); не работает для меня в IE7 +

Я должен был использовать $("#myselect").html("<option value='text'>text</option>");

Аурелио Де Роса
источник
Я использую тот же синтаксис (новый Option (...) в браузере Android Chrome (на телефоне), и он там тоже не работает)
raddevus
15

Чтобы повысить производительность, вы должны попытаться изменить DOM только один раз, особенно если вы добавляете много опций.

var html = '';

for (var i = 0, len = data.length; i < len; ++i) {
    html.join('<option value="' + data[i]['value'] + '">' + data[i]['label'] + '</option>');
}           

$('#select').append(html);
Джон Магнолия
источник
1
чтобы string.join()
повысить
1
Это отличное решение. У меня была проблема с «join ()» в примере, который не является допустимой функцией, но это решение позволяет вам использовать «обещание» jQuery, чтобы определить, когда все опции были добавлены и DOM завершил обновление. С другими решениями, которые добавляют опции один за другим, это не может быть сделано так же легко. Замените последнюю строку в примере следующим, чтобы выполнить действие только после завершения модификации DOM: $ .when ($ ('# select'). Append (html)). Done (function () {callSomeFunctionThatRequiresOptionsToBeSet ()} );
Америкус
13
$('#mySelect').empty().append('<option value=1>My option</option>').selectmenu('refresh');
szpapas
источник
8
Если я не ошибаюсь, это решение требует не только jQuery, но и jQueryUI. selectmenu()не является частью ядра jQuery и является виджетом jQueryUI . Это делает его довольно сложным решением, нет?
Tatlar
13

Мне нравится использовать не JQuery подход:

mySelect.add(new Option('My option', 1));
caiohamamura
источник
3
Мне нравится, когда я не выступаю;) Не вижу этого слишком часто
Даккарон
3
Да, и хотя я не могу подвергать сомнению силу запросов, есть случаи, когда это не упрощает вещи.
Кайохамамура
11

Вы можете добавить параметры динамически в раскрывающийся список, как показано в примере ниже. Здесь, в этом примере, я взял данные массива и связал эти значения массива с раскрывающимся списком, как показано на выходном скриншоте

Вывод:

введите описание изображения здесь

var resultData=["Mumbai","Delhi","Chennai","Goa"]
$(document).ready(function(){
   var myselect = $('<select>');
     $.each(resultData, function(index, key) {
	     myselect.append( $('<option></option>').val(key).html(key) );
       });
      $('#selectCity').append(myselect.html());
});
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js">
</script>

<select  id="selectCity">

</select>

GSB
источник
9

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

var o = new Option("option text", "value");
o.selected=true;
$("#mySelect").append(o);
Эдуард Флоринеску
источник
1
Спасибо, мне нужно было предварительно выбрать опцию, сгенерированную из json, и это сработало хорошо.
Георг Патшайдер
9
var select = $('#myselect');
var newOptions = {
                'red' : 'Red',
                'blue' : 'Blue',
                'green' : 'Green',
                'yellow' : 'Yellow'
            };
$('option', select).remove();
$.each(newOptions, function(text, key) {
    var option = new Option(key, text);
    select.append($(option));
});
MaxEcho
источник
5

Есть два пути. Вы можете использовать любой из этих двух.

Первый:

$('#waterTransportationFrom').append('<option value="select" selected="selected">Select From Dropdown List</option>');

Во-вторых:

$.each(dataCollecton, function(val, text) {            
    options.append($('<option></option>').val(text.route).html(text.route));
});
Дулит Де Коста
источник
3

Если вы хотите вставить новую опцию по определенному индексу в select:

$("#my_select option").eq(2).before($('<option>', {
    value: 'New Item',
    text: 'New Item'
}));

Это вставит «Новый элемент» в качестве 3-го элемента в выборе.

ATOzTOA
источник
3

Вы можете добавить и установить атрибут Value с текстом:

$("#id").append($('<option></option>').attr("value", '').text(''));
$("#id").append($('<option></option>').attr("value", '4').text('Financial Institutions'));
Ahmed
источник
3

Мы обнаружили некоторую проблему, когда вы добавляете опцию и используете jquery validate. Вы должны щелкнуть один элемент в списке выбора нескольких. Вы добавите этот код для обработки:

$("#phonelist").append("<option value='"+ 'yournewvalue' +"' >"+ 'yournewvalue' +"</option>");

$("#phonelist option:selected").removeAttr("selected"); // add to remove lase selected

$('#phonelist option[value=' + 'yournewvalue' + ']').attr('selected', true); //add new selected

https://i.stack.imgur.com/HOjIY.png

Пеанг Пеанг
источник
3

Как насчет этого

var numbers = [1, 2, 3, 4, 5];
var option = '';

for (var i=0;i<numbers.length;i++){
     option += '<option value="'+ numbers[i] + '">' + numbers[i] + '</option>';
    }

    $('#items').append(option);
Mcfaith
источник
2

Это просто быстрые очки за лучшую производительность

всегда, когда вы имеете дело со многими опциями, создайте большую строку, а затем добавьте ее в «select» для лучшей производительности

фг

var $ mySelect = $ ('# mySelect'); var str = '';

$.each(items, function (i, item) {
    // IMPORTANT: no selectors inside the loop (for the best performance)
    str += "<option value='" + item.value + "'> " + item.text + "</option>";
});
// you built a big string

$mySelect.html(str); // <-- here you add the big string with a lot of options into the selector.
$mySelect.multiSelect('refresh');

Даже быстрее

var str = ""; 
for(var i; i = 0; i < arr.length; i++){
    str += "<option value='" + item[i].value + "'> " + item[i].text + "</option>";
}    
$mySelect.html(str);
$mySelect.multiSelect('refresh');
Hatim
источник
2
$(function () {
     var option = $("<option></option>");
     option.text("Display text");
     option.val("1");
     $("#Select1").append(option);
});

Если вы получаете данные от какого-то объекта, просто отправьте этот объект в функцию ...

$(function (product) {
     var option = $("<option></option>");
     option.text(product.Name);
     option.val(product.Id);
     $("#Select1").append(option);
});

Name и Id - это имена свойств объекта ... так что вы можете вызывать их как угодно ... И конечно, если у вас есть Array ... вы хотите создать пользовательскую функцию с помощью цикла for ..., а затем просто вызвать эту функцию в документ готов ... ура

Роберт Нол
источник
2

Основываясь на ответе дула на добавление коллекции предметов, однострочникfor...in также будет творить чудеса:

let cities = {'ny':'New York','ld':'London','db':'Dubai','pk':'Beijing','tk':'Tokyo','nd':'New Delhi'};

for(let c in cities){$('#selectCity').append($('<option>',{value: c,text: cities[c]}))}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script>
<select  id="selectCity"></select>

И значения объектов и индексы присваиваются опциям. Это решение работает даже в старом jQuery (v1.4) !

CPHPython
источник
1

если у вас есть optgroup внутри select , у вас есть ошибка в DOM.

Я думаю, что лучший способ:

$("#select option:last").after($('<option value="1">my option</option>'));
д-ворачивается
источник
1

Вы можете попробовать ниже код, чтобы добавить к опции

  <select id="mySelect"></select>

    <script>
          $("#mySelect").append($("<option></option>").val("1").html("My enter code hereoption"));
    </script>
Мухаммед Камаль
источник
1
$('#select_id').append($('<option>',{ value: v, text: t }));
Cris
источник
1

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

$(document).on("click","#button",function() {
   $('#id_table_AddTransactions').append('<option></option>')
}
Рональд Валера Сантана
источник
Должно ли это быть$(document).ready(function(){ $("#button").click(function() { $('#id_table_AddTransactions').append('<option></option>'); }); });
Барик Дхармаван
Да, вы правы в этом. Мой ответ не включал готовое утверждение, потому что я сосредоточился на том, что решило проблему.
Рональд Валера Сантана
1

Вы можете сделать это в ES6:

$.each(json, (i, val) => {
    $('.js-country-of-birth').append(`<option value="${val.country_code}"> ${val.country} </option>`);
  });
idiglove
источник
1

Если кто-то приходит сюда в поисках способа добавления параметров со свойствами данных

Использование attr

var option = $('<option>', { value: 'the_value', text: 'some text' }).attr('family', model.family);

Использование данных - добавлена ​​версия 1.2.3

var option = $('<option>', { value: 'the_value', text: 'some text' }).data('misc', 'misc-value);
masmerino
источник