jQueryを使用して<select>にオプションを追加しますか?


739

optionjQueryを使用してドロップダウンにを追加する最も簡単な方法は何ですか?

これは機能しますか?

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

26
または$("#mySelect").html(....)、現在のオプションを新しいオプションで置き換えるために使用します。
Dan Diplo、2012年

回答:


266

これは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で問題が発生しましたが、あなたのコードは私のために機能しました、ありがとう!
アレクサンドルLテルズ

また、select-elementにスタイルとして適用されてdisplay: table;ないことを確認してください。これはjs-codeを壊します
Gundon

1
興味がある場合は、FireFox、Chromeではオプションがappend()で機能しないがIEでは機能しないことに関連するバグを以下に示します。bugs.jquery.com
ticket

2
+1-オブジェクトを「jquerify」する必要なしに私のために働いた。var o = new Option('option text', 'value'); o.innerHTML = 'option text'; document.getElementById('selectList').appendChild(o);
アウスト・

これに「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 
    }));
});

23
多くのオプションを追加する場合は、HTML文字列を作成して追加するだけと比較すると、これはかなり遅くなります
クリック投票

3
多くのソリューションとは異なり、IEで動作します
DancesWithBamboo 2014年

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

4
@duleに感謝しますが、デフォルトで新しいオプションを選択するにはどうすればよいですか?
Lord_JABA

11
{選択:true}
jmadsen 2017年

115

次の構文を使用してオプションを追加できます。詳細については、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));


1
最初のものは$( "#SectionNames")。append($( '<option>'、{value:1、text: "one"})に変更する必要があります
EthenHY

1
2つ目のオプションタグの属性が(のvalue代わりにval)正しくありません。正しいコードがなければならない$('select').append('<option value="1">One</option>');
トッド・

おかげでディプ:))
フォックス

45

オプションの名前または値が動的である場合、オプション内の特殊文字のエスケープについて心配する必要はありません。これでは、単純なDOMメソッドを好むかもしれません。

var s= document.getElementById('mySelect');
s.options[s.options.length]= new Option('My option', '1');

1
私にはそれほど単純に見えません!!
Upvoteをクリック

27
これはJavaScriptの用語では単純です
。jquery

document.getElementById( 'mySelect')。add(new Option( 'My option'、 '1')); // IE8以上の場合
Hafthor 2013

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

それはうまくいきます。

複数のオプション要素を追加する場合、各要素で追加を実行するのではなく、追加を1回実行することをお勧めします。


18

理由が何であれ$("#myselect").append(new Option("text", "text"));、IE7以降ではうまくいかない

私は使用しなければなりませんでした $("#myselect").html("<option value='text'>text</option>");


私は電話でAndroidのChromeブラウザ上(新しいオプション(...)()は同じ構文を使用していますが、それはどちらかが機能していません。
raddevus

15

パフォーマンスを向上させるには、DOMを1回だけ変更するようにしてください。多くのオプションを追加する場合は、さらに変更してください。

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の更新が完了するタイミングを判断できます。オプションを1つずつ追加する他のソリューションでは、これは簡単には行えません。例の最後の行を次のように置き換えて、DOMの変更が完了した後にのみアクションを実行します。$ .when($( '#select')。append(html))。done(function(){callSomeFunctionThatRequiresOptionsToBeSet()} );
Americus

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

8
私が間違っていない限り、このソリューションにはjQueryだけでなくjQueryUIも必要です。selectmenu()はjQueryコアの一部ではなく、jQueryUI ウィジェットです。それはそれをかなり強引な解決策にしますよね?
tatlar 2014年

13

非jqueryアプローチを使用したい:

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

3
私はそれが非jqueryであることを気に入っています;)それほど頻繁に表示しないでください
ダッカロン

3
ええ、そして私はjqueryのパワーを疑うことはできませんが、それが物事を単純化しない場合があります。
caiohamamura 2015

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 o = new Option("option text", "value");
o.selected=true;
$("#mySelect").append(o);

1
おかげで、私はjsonから生成されたオプションを事前に選択する必要があり、これはうまくいきました。
Georg Patscheider 2016

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

2つの方法があります。これら2つのどちらかを使用できます。

最初:

$('#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番目のアイテムとして挿入されます。


3

テキストを使用してValue属性を追加および設定できます。

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

3

オプションを追加してjquery検証を使用するときに問題が見つかりました。複数選択リストで1つの項目をクリックする必要があります。このコードを追加して処理します。

$("#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

これは、最高のパフォーマンスを得るための要点です

多くのオプションを扱う場合は常に、大きな文字列を作成し、それを「select」に追加して最高のパフォーマンスを実現します

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

名前とIDはオブジェクトプロパティの名前です...したがって、好きなようにそれらを呼び出すことができます...もちろん、配列がある場合はもちろん... forループを使用してカスタム関数を作成したい場合は...ドキュメント準備完了...乾杯


2

アイテムのコレクションを追加するためのduleの回答に基づいて、ワンライナー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

uが持っている場合はOPTGROUP内部の選択、uがDOMにエラーが発生しました。

私は最善の方法だと思います:

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

1

Uはオプションに追加するために以下のコードを試すことができます

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

    <script>
          $("#mySelect").append($("<option></option>").val("1").html("My enter code hereoption"));
    </script>


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);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.