2009-11-26 7 views

Antwort

478

verwenden Sie können die vorhandenen Optionen entfernen, indem die empty Methode verwenden, und dann Fügen Sie Ihre neuen Optionen hinzu:

var option = $('<option></option>').attr("value", "option value").text("Text"); 
$("#selectId").empty().append(option); 

Wenn Sie haben Sie Ihre neue Optionen in einem Objekt können Sie:

var newOptions = {"Option 1": "value1", 
    "Option 2": "value2", 
    "Option 3": "value3" 
}; 

var $el = $("#selectId"); 
$el.empty(); // remove old options 
$.each(newOptions, function(key,value) { 
    $el.append($("<option></option>") 
    .attr("value", value).text(key)); 
}); 

Edit: Für die alle Optionen zu entfernen, aber die erste, können Sie den :gt Selektor verwenden, erhalten alle option Elemente mit Index größer als Null und remove sie:

$('#selectId option:gt(0)').remove(); // remove all options, but not the first 
+2

Wie bleibt die erste Option beim leeren()? – Mask

+37

+1 für '$ ('# selectId option: gt (0)'). Remove();' –

+0

Wenn Sie [bootstrap-select] (https://silviomoreto.github.io/bootstrap-select/) verwenden, fügen Sie hinzu Folgendes, um die Auswahlauswahl nach dem Ersetzen der Optionen zu aktualisieren: '$ ('# selectId'). selectpicker ('refresh'); $ ('# selectId') selectpicker ('render'); '. Andernfalls sind die neuen Optionen in Ihrer Auswahlliste nicht sichtbar. – phn

13
$('#comboBx').append($("<option></option>").attr("value",key).text(value)); 

wo ComboBx ist Ihre Combo-Box-ID.

oder Sie können Optionen als String an die bereits vorhandene innerHTML anhängen und dann der ausgewählten innerHTML zuweisen.

bearbeiten

Wenn Sie die erste Option zu halten brauchen, und entfernen Sie alle anderen, dann können Sie

var firstOption = $("#cmb1 option:first-child"); 
$("#cmb1").empty().append(firstOption); 
+0

Sie haben die alten Optionen nicht entfernt? – Mask

+0

Möchten Sie die alten löschen? Fügen Sie einfach neue Optionen zu den bestehenden Optionen hinzu? – rahul

+0

Ja, ich möchte die alten außer dem ersten löschen. – Mask

64

I CMS ausgezeichnete Antwort in eine schnelle jQuery-Erweiterung warf:

(function($, window) { 
    $.fn.replaceOptions = function(options) { 
    var self, $option; 

    this.empty(); 
    self = this; 

    $.each(options, function(index, option) { 
     $option = $("<option></option>") 
     .attr("value", option.value) 
     .text(option.text); 
     self.append($option); 
    }); 
    }; 
})(jQuery, window); 

Es erwartet ein Array von Objekten, die "text" - und "value" -Tasten enthalten. So Nutzung ist wie folgt:

var options = [ 
    {text: "one", value: 1}, 
    {text: "two", value: 2} 
]; 

$("#foo").replaceOptions(options); 
5

Aus irgendeinem Grund, diesen Teil

$el.empty(); // remove old options 

von CMS-Lösung nicht für mich arbeiten, so statt, dass ich einfach dieses

verwendet habe
el.html(' '); 

Und es funktioniert. Also meine Arbeits Code sieht nun wie folgt aus:

var newOptions = { 
    "Option 1":"option-1", 
    "Option 2":"option-2" 
}; 

var $el = $('.selectClass'); 
$el.html(' '); 
$.each(newOptions, function(key, value) { 
    $el.append($("<option></option>") 
    .attr("value", value).text(key)); 
}); 
1

Wenn zum Beispiel Ihre HTML-Code diesen Code enthalten:

<select id="selectId"><option>Test1</option><option>Test2</option></select> 

Um die Liste der Option in Ihrem wählen zu ändern, können Sie diesen Code verwenden brüllen. Wenn Ihr Name gewählt wird, wählen Sie selectId.

var option = $('<option></option>').attr("value", "option value").text("Text"); 
$("#selectId").html(option); 

in diesem Beispiel oben i die alte Liste der Option ändern durch nur eine neue Option.

+1

Warum sollte das OP das versuchen? Bitte fügen Sie eine Erklärung hinzu, was Sie getan haben und warum Sie es so gemacht haben, nicht nur für das OP, sondern auch für zukünftige Besucher von SO. –

2

Das Entfernen und Hinzufügen eines DOM-Elements ist langsamer als das Ändern eines vorhandenen.

Wenn Ihre Optionsgruppen gleiche Länge haben, können Sie etwas tun:

$('#my-select option') 
.each(function(index) { 
    $(this).text('someNewText').val('someNewValue'); 
}); 

Falls Ihre neue Option Satz hat unterschiedliche Länge, können Sie löschen/hinzufügen leer Optionen, die Sie wirklich brauchen, etwas Technik oben beschrieben.

1

wenn wir <select> ständig aktualisieren und wir brauchen vorherigen Wert speichern:

var newOptions = { 
    'Option 1':'value-1', 
    'Option 2':'value-2' 
}; 

var $el = $('#select'); 
var prevValue = $el.val(); 
$el.empty(); 
$.each(newOptions, function(key, value) { 
    $el.append($('<option></option>').attr('value', value).text(key)); 
    if (value === prevValue){ 
     $el.val(value); 
    } 
}); 
$el.trigger('change'); 
0

Does diese Hilfe?

$("#SelectName option[value='theValueOfOption']")[0].selected = true; 
+1

Bei dieser Frage geht es darum,