使用jQuery将选项添加到<select>吗?


738

option使用jQuery向下拉列表添加最简单的方法是什么?

这样行吗?

$("#mySelect").append('<option value=1>My option</option>');

26
或使用$("#mySelect").html(....)新选项替换当前选项。
Dan Diplo

Answers:


264

这在IE8中不起作用(但在FF中起作用):

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

此DID工作:

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上遇到问题,但是您的代码对我有用,谢谢!
Alexandre L Telles 2012年

另外,还要确保display: table;作为样式应用到选择元素。这将破坏js代码
Gundon

1
如果您有兴趣,这里是与Option不能与append()一起工作的错误有关的错误,它们在FireFox,Chrome中有效,但在IE中不起作用
JackDev 2013年

2
+1-为我工作,而无需“ jquerify”对象。var o = new Option('option text', 'value'); o.innerHTML = 'option text'; document.getElementById('selectList').appendChild(o);
2013年

有没有一种方法可以向其中添加“ data-xxx”值?
PedroJoaquín19年

817

就个人而言,我更喜欢以下语法来附加选项:

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

如果要从一组项目中添加选项,则可以执行以下操作:

$.each(items, function (i, item) {
    $('#mySelect').append($('<option>', { 
        value: item.value,
        text : item.text 
    }));
});

23
如果您要添加很多选项,这将非常慢,而不是仅仅构建一个html字符串并附加它
单击Upvote 2013年

3
与许多解决方案不同,它可以在IE中工作
DancesWithBamboo 2014年

3
@Ropitems={option1:{value:1,text:1},option2:{value:2,text:2}}
gamliela

4
谢谢@dule,但是我如何才能默认选择新选项?
Lord_JABA '16

11
{selected:true}
jmadsen

114

您可以使用以下语法添加选项,也可以访问jQuery中的Way handle选项以获取更多详细信息。

  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));


1
第一个应该更改为$(“#SectionNames”)。append($('<option>',{value:1,text:“ one”})
EthenHY 2014年

1
第二个选项标签(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');

1
对我来说看起来并不简单!
点击Upvote

27
用JavaScript术语来说这很简单,jquery对人们来说太简单了
DWolf 2013年

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

那很好。

如果添加多个选项元素,我建议执行一次附加操作,而不是在每个元素上执行附加操作。


18

不论出于何种原因$("#myselect").append(new Option("text", "text"));,在IE7 +中对我都不起作用

我不得不用 $("#myselect").html("<option value='text'>text</option>");


我在Android Chrome浏览器(在电话上)上使用了相同的语法(new Option(...),并且在那也不起作用
。– 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()串联字符串
mfeineis 2015年

1
这是一个很好的解决方案。在示例中,我遇到了一个问题,即“ join()”不是有效函数,但是该解决方案允许您使用jQuery“ promise”来确定何时添加了所有选项并且DOM完成了更新。对于其他解决方案,一个接一个地添加选项,这很难做到。用以下示例替换示例中的最后一行,以便仅在DOM修改完成后才执行操作:$ .when($('#select')。append(html))。done(function(){callSomeFunctionThatRequiresOptionsOptionsToBeSet()} );
Americus'6

13
$('#mySelect').empty().append('<option value=1>My option</option>').selectmenu('refresh');

8
除非我没有记错,否则此解决方案不仅需要jQuery,而且还需要jQueryUI。selectmenu()不是jQuery核心的一部分,而是jQueryUI 小部件。这使它成为一个笨拙的解决方案,不是吗?
塔特拉2014年

13

我喜欢使用非jquery方法:

mySelect.add(new Option('My option', 1));

3
我喜欢它不是非jquery;)不要经常看到它
Dakkaron 2015年

3
是的,尽管我不能质疑jquery的功能,但在某些情况下它并不能简化事情。
caiohamamura

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>



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));
});

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

如果要在选择的特定索引处插入新选项:

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

这将在选择项中插入“新项”作为第三项。


3

您可以使用文本附加并设置Value属性:

$("#id").append($('<option></option>').attr("value", '').text(''));
$("#id").append($('<option></option>').attr("value", '4').text('Financial Institutions'));

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);

2

这只是获得最佳性能的捷径

总是在处理许多选项时,构建一个大字符串,然后将其添加到“选择”中以获得最佳性能

fg

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');

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)中,该解决方案也可以使用!


1

如果select内有optgroup,则您在DOM中出错。

我认为最好的方法是:

$("#select option:last").after($('<option value="1">my option</option>'));


1
$('#select_id').append($('<option>',{ value: v, text: t }));

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>`);
  });

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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.