Hinzufügen von Optionen zu einer <Auswahl> mithilfe von jQuery?


739

Was ist der einfachste Weg, optionmit jQuery ein Dropdown-Menü hinzuzufügen ?

Ob das funktioniert?

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

26
Oder verwenden Sie $("#mySelect").html(....), um die aktuellen Optionen durch die neuen zu ersetzen.
Dan Diplo

Antworten:


266

Dies funktionierte NICHT in IE8 (noch in FF):

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

Diese DID Arbeit:

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
Ich hatte Probleme mit IE8, aber Ihr Code hat bei mir funktioniert, danke!
Alexandre L Telles

Stellen Sie außerdem sicher , dass display: table;wird nicht als Stil auf das select-Element angelegt. Dies wird den js-Code brechen
Gundon

1
Wenn Sie interessiert sind, hier ist der Fehler, der sich darauf bezieht, wie Optionen nicht mit append () in FireFox, Chrome, aber nicht in IE funktionieren
JackDev

2
+1 - Hat für mich gearbeitet, ohne das Objekt "jquerifizieren" zu müssen. var o = new Option('option text', 'value'); o.innerHTML = 'option text'; document.getElementById('selectList').appendChild(o);
Aust

Gibt es eine Möglichkeit, "data-xxx" -Werte hinzuzufügen?
Pedro Joaquín

817

Persönlich bevorzuge ich diese Syntax zum Anhängen von Optionen:

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

Wenn Sie Optionen aus einer Sammlung von Elementen hinzufügen, können Sie Folgendes tun:

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

23
Dies wird ziemlich langsam sein, wenn Sie viele Optionen hinzufügen, verglichen mit dem Aufbau und Anhängen einer HTML-Zeichenfolge
Klicken Sie auf Upvote

3
Funktioniert im IE im Gegensatz zu vielen anderen Lösungen
DancesWithBamboo

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

4
danke @dule, aber wie kann ich standardmäßig eine neue Option auswählen?
Lord_JABA

11
{ausgewählt: wahr}
jmadsen

115

Sie können Optionen mithilfe der folgenden Syntax hinzufügen. Weitere Informationen finden Sie unter Optionen für die Behandlung in 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
Der erste sollte in $ ("# SectionNames") geändert werden. append ($ ('<Option>', {Wert: 1, Text: "Eins"})
EthenHY

1
Das zweite hat ein falsches Attribut im Options-Tag ( valueanstelle von val). Der richtige Code sollte sein$('select').append('<option value="1">One</option>');
Todd

Danke Dipu :))
Fox

45

Wenn der Name oder Wert der Option dynamisch ist, müssen Sie sich keine Gedanken darüber machen, ob Sonderzeichen darin enthalten sind. In diesem Fall bevorzugen Sie möglicherweise einfache DOM-Methoden:

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

1
Sieht für mich nicht so einfach aus !!
Klicken Sie auf Upvote

27
Dies ist einfach in Javascript ausgedrückt, jquery hat die Dinge für die Menschen zu einfach gemacht
DWolf

document.getElementById ('mySelect'). add (neue Option ('Meine Option', '1')); // wenn IE8 oder besser
Hafthor

34

Option 1-

Sie können dies versuchen-

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

So was-

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>

Option 2-

Oder versuchen Sie dies-

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

So was-

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

Das ist sehr einfach:

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

oder

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

18

Das funktioniert gut.

Wenn Sie mehr als ein Optionselement hinzufügen, würde ich empfehlen, das Anhängen einmal auszuführen, anstatt für jedes Element ein Anhängen durchzuführen.


18

aus welchem ​​Grund auch immer $("#myselect").append(new Option("text", "text")); funktioniert das nicht für mich in IE7 +

Ich musste benutzen $("#myselect").html("<option value='text'>text</option>");


Ich verwende dieselbe Syntax (neue Option (...) im Android Chrome-Browser (auf einem Telefon) und sie funktioniert dort auch nicht.
Raddevus

15

Um die Leistung zu verbessern, sollten Sie versuchen, das DOM nur einmal zu ändern, insbesondere wenn Sie viele Optionen hinzufügen.

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()
Um die

1
Dies ist eine großartige Lösung. Ich hatte ein Problem mit "join ()" im Beispiel, das keine gültige Funktion ist, aber mit dieser Lösung können Sie ein "Versprechen" von jQuery verwenden, um festzustellen, wann alle Optionen hinzugefügt wurden und die Aktualisierung des DOM abgeschlossen ist. Bei den anderen Lösungen, bei denen Optionen einzeln hinzugefügt werden, ist dies nicht so einfach. Ersetzen Sie die letzte Zeile im Beispiel durch die folgende, um erst nach Abschluss der DOM-Änderung eine Aktion auszuführen: $ .when ($ ('# select'). Append (html)). Doed (function () {callSomeFunctionThatRequiresOptionsToBeSet ()} );
Americus

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

8
Sofern ich mich nicht irre, erfordert diese Lösung nicht nur jQuery, sondern auch jQueryUI. selectmenu()ist nicht Teil des jQuery-Kerns und ein jQueryUI- Widget . Das macht es zu einer ziemlich hartnäckigen Lösung, oder?
Tatlar

13

Ich verwende gerne den Non-Query-Ansatz:

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

3
Ich mag es, wenn es nicht jquery ist;) Sieh das nicht zu oft
Dakkaron

3
Ja, und obwohl ich jquery power nicht in Frage stellen kann, gibt es Fälle, in denen es die Dinge nicht vereinfacht.
Caiohamamura

11

Sie können Optionen dynamisch zur Dropdown-Liste hinzufügen, wie im folgenden Beispiel gezeigt. Hier in diesem Beispiel habe ich Array-Daten genommen und diese Array-Werte an das Dropdown-Menü gebunden, wie im Ausgabe-Screenshot gezeigt

Ausgabe:

Geben Sie hier die Bildbeschreibung ein

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

In keiner Antwort erwähnt, aber nützlich ist der Fall, in dem diese Option ebenfalls ausgewählt werden soll. Sie können Folgendes hinzufügen:

var o = new Option("option text", "value");
o.selected=true;
$("#mySelect").append(o);

1
Danke, ich musste eine von json generierte Option vorwählen und das hat gut funktioniert.
Georg Patscheider

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

Es gibt zwei Möglichkeiten. Sie können eine dieser beiden verwenden.

Zuerst:

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

Zweite:

$.each(dataCollecton, function(val, text) {            
    options.append($('<option></option>').val(text.route).html(text.route));
});

3

Wenn Sie die neue Option an einem bestimmten Index in die Auswahl einfügen möchten:

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

Dadurch wird das "Neue Element" als drittes Element in die Auswahl eingefügt.


3

Sie können das Value-Attribut mit Text anhängen und festlegen:

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

3

Wir haben ein Problem festgestellt, wenn Sie die Option anhängen und jquery validate verwenden. Sie müssen auf ein Element in der Liste "Mehrere auswählen" klicken. Sie werden diesen Code hinzufügen, um Folgendes zu verarbeiten:

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

Wie wäre es damit

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

Dies ist nur ein kurzer Punkt für die beste Leistung

Wenn Sie mit vielen Optionen zu tun haben, erstellen Sie immer eine große Zeichenfolge und fügen Sie sie dann zur Auswahl hinzu, um die beste Leistung zu erzielen

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

Noch schneller

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

Wenn Sie Daten von einem Objekt erhalten, leiten Sie dieses Objekt einfach an die Funktion weiter ...

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

Name und ID sind Namen von Objekteigenschaften ... damit Sie sie aufrufen können, wie Sie möchten ... Und natürlich, wenn Sie über Array verfügen ... möchten Sie eine benutzerdefinierte Funktion mit for-Schleife erstellen ... und diese Funktion dann einfach aufrufen Dokument bereit ... Prost


2

Basierend auf Antwort des dule für eine Sammlung von Gegenständen anhängen, ein Einzeilerfor...in auch Wunder wirken:

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>

Den Optionen werden sowohl Objektwerte als auch Indizes zugewiesen. Diese Lösung funktioniert sogar in der alten jQuery (v1.4) !


1

Wenn Sie optgroup in select haben , haben Sie einen Fehler im DOM.

Ich denke am besten:

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

1

Sie können den folgenden Code ausprobieren, um ihn an die Option anzuhängen

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

1

So habe ich es gemacht, mit einer Schaltfläche zum Hinzufügen jedes ausgewählten Tags.

$(document).on("click","#button",function() {
   $('#id_table_AddTransactions').append('<option></option>')
}

Sollte es sein$(document).ready(function(){ $("#button").click(function() { $('#id_table_AddTransactions').append('<option></option>'); }); });
Bariq Dharmawan

Ja, da hast du recht. Meine Antwort enthielt keine fertige Aussage, da ich mich darauf konzentrierte, was das Problem löste.
Ronald Valera Santana

1

Sie können dies in ES6 tun:

$.each(json, (i, val) => {
    $('.js-country-of-birth').append(`<option value="${val.country_code}"> ${val.country} </option>`);
  });

1

Wenn jemand hierher kommt und nach einer Möglichkeit sucht, Optionen mit Dateneigenschaften hinzuzufügen

Mit attr

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

Mit Daten - Version hinzugefügt 1.2.3

var option = $('<option>', { value: 'the_value', text: 'some text' }).data('misc', 'misc-value);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.