jQuery로 <select>의 옵션을 변경하는 방법은 무엇입니까?


271

옵션 목록을 사용할 수 있다고 가정하면 <select>새로운 옵션으로 어떻게 업데이트 <option>합니까?

답변:


599

empty방법 을 사용하여 기존 옵션을 제거한 다음 새 옵션을 추가 할 수 있습니다.

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

객체에 새로운 옵션이있는 경우 다음을 수행 할 수 있습니다.

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

편집 : 첫 번째 옵션을 제외한 모든 옵션을 제거하려면 :gt선택기를 사용하여 option인덱스가 0보다 큰 모든 요소 를 가져올 수 remove있습니다.

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

2
비어있을 때 첫 번째 옵션을 유지하는 방법은 무엇입니까?
Mask

2
부트 스트랩 선택 을 사용하는 경우 옵션을 교체 한 후 선택 피커를 새로 고치려면 다음을 추가하십시오 $('#selectId').selectpicker('refresh'); $('#selectId').selectpicker('render');.. 그렇지 않으면 새 옵션이 선택 목록에 표시되지 않습니다.
phn

이 옵션 중 하나를 어떻게 확인할 수 있습니까?
Darós

나는 개인적으로 jQuery를 노드 생성하기위한 구문 조금 청소기를 찾을 수$el.append($('<option/>', { value: value, text: key }));
rorofromfrance을

고마워 기본 선택된 값의 페이지를 편집 할 때 선택된 값을 설정해야하는 경우 특정 반복에 대해 루프에서 이와 같은 것을 사용할 수 있습니다. 선택한 $ el.append ($ ( '<option />', {value : 선택된 값 : 'selected', text : key}));
개발자

79

CMS의 뛰어난 답변을 빠른 jQuery 확장에 던져 넣었습니다.

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

"텍스트"및 "값"키를 포함하는 객체 배열이 필요합니다. 따라서 사용법은 다음과 같습니다.

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

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

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

여기서 comboBx는 콤보 상자 ID입니다.

또는 기존의 innerHTML에 문자열로 옵션을 추가 한 다음 select innerHTML에 할당 할 수 있습니다.

편집하다

첫 번째 옵션을 유지하고 다른 모든 옵션을 제거 해야하는 경우 사용할 수 있습니다

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

이전 옵션을 제거하지 않았습니까?
Mask

기존 옵션을 지우시겠습니까? o 기존 옵션에 새 옵션을 추가하기 만하면됩니까?
rahul

5

이상한 이유로이 부분

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

CMS 솔루션에서 나에게 효과가 없었으므로 대신 이것을 사용했습니다.

el.html(' ');

그리고 그것은 작동합니다. 따라서 내 작업 코드는 이제 다음과 같습니다.

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

3

DOM 요소를 제거하고 추가하는 것이 기존 요소를 수정하는 것보다 느립니다.

옵션 세트의 길이가 같은 경우 다음과 같이 할 수 있습니다.

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

새 옵션 세트의 길이가 다른 경우 위에서 설명한 일부 기술을 사용하여 실제로 필요한 빈 옵션을 삭제 / 추가 할 수 있습니다.


1

예를 들어 html 코드에 다음 코드가 포함 된 경우 :

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

선택 항목 내에서 옵션 목록을 변경하려면 다음 코드를 사용하십시오. 때 이름이 이름을 선택 selectId을 .

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

위의 예제에서 하나의 새 옵션으로 이전 옵션 목록을 변경합니다 .


1
OP는 왜 이것을 시도해야합니까? OP뿐만 아니라 향후 SO 방문자를 위해 수행 한 작업과 그 방법에 대한 설명을 추가하십시오.
Jay Blanchard

1

도움이 되나요?

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

3
이 질문은 특정 옵션을 선택하지 않고 <option>을 <select>에 동적으로 추가하는 것에 관한 것입니다.
sisve

1

손으로 일하는 오래된 학교는 항상 나에게 좋았습니다.

  1. 선택을 청소하고 첫 번째 옵션을 그대로 두십시오.

        $('#your_select_id').find('option').remove()
        .end().append('<option value="0">Selec...</option>')
        .val('whatever');
    
  2. 데이터가 Json 또는 그 밖의 다른 곳에서 온 경우 (데이터 연결)

        var JSONObject = JSON.parse(data);
        newOptionsSelect = '';
        for (var key in JSONObject) {
            if (JSONObject.hasOwnProperty(key)) {
                var newOptionsSelect = newOptionsSelect + '<option value="'+JSONObject[key]["value"]+'">'+JSONObject[key]["text"]+'</option>';
            }
        }
    
        $('#your_select_id').append( newOptionsSelect );
    
  3. 내 Json Objetc :

        [{"value":1,"text":"Text 1"},{"value":2,"text":"Text 2"},{"value":3,"text":"Text 3"}]

이 솔루션은 Ajax 작업에 이상적이며 데이터베이스에서 Json으로 응답합니다.


0

<select>지속적으로 업데이트 하고 이전 값을 저장 해야하는 경우 :

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');
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.