선택 상자의 모든 옵션을 제거한 다음 하나의 옵션을 추가하고 jQuery로 선택하는 방법은 무엇입니까?


1077

핵심 jQuery를 사용하여 선택 상자의 모든 옵션을 제거한 다음 하나의 옵션을 추가하고 선택하는 방법은 무엇입니까?

내 선택 상자는 다음과 같습니다.

<Select id="mySelect" size="9"> </Select>

편집 : 다음 코드는 체인에 도움이되었습니다. 그러나 (Internet Explorer에서) .val('whatever')추가 된 옵션을 선택하지 않았습니다. ( .append와 에서 모두 동일한 '값'을 사용했습니다 .val.)

$('#mySelect').find('option').remove().end()
.append('<option value="whatever">text</option>').val('whatever');

편집 :이 코드를 모방하려고 페이지 / 양식이 재설정 될 때마다 다음 코드를 사용합니다. 이 선택 상자는 일련의 단일 선택 단추로 채워집니다. .focus()더 가까이 있지만 옵션은 에서처럼 선택되지 않았습니다 .selected= "true". 기존 코드에 아무런 문제가 없습니다. jQuery를 배우려고합니다.

var mySelect = document.getElementById('mySelect');
mySelect.options.length = 0;
mySelect.options[0] = new Option ("Foo (only choice)", "Foo");
mySelect.options[0].selected="true";

편집 : 선택한 답변이 내가 필요한 것에 가깝습니다. 이것은 나를 위해 일했다 :

$('#mySelect').children().remove().end()
.append('<option selected value="whatever">text</option>') ;

그러나 두 대답 모두 저의 최종 해결책으로 이끌었습니다.

답변:


1695
$('#mySelect')
    .find('option')
    .remove()
    .end()
    .append('<option value="whatever">text</option>')
    .val('whatever')
;

3
@ nickf : 같은 문제가 있지만 드롭 다운 변경시 하나가 아닌 체크 박스 세트를 추가해야하지만 체크 박스는 xml에서 나옵니다. 이것은 작동하지 않습니다
defau1t

10
옵션 / 공격자 / 텍스트를 다음과 같이 나눌 수도 있습니다..append($("<option></option>").attr("value", '123').text('ABC!')
Brock Hensley 2016 년

1
@BrockHensley, 나는이 답변의 진정한 우아함이 end () 함수와 콤보로 올바르게 연결되어 있다고 생각합니다. 당신의 제안도 효과가 있습니다. jQuery API 문서에서 : "대부분의 jQuery의 DOM 탐색 메소드는 jQuery 객체 인스턴스에서 작동하고 다른 DOM 요소 세트와 일치하는 새 인스턴스를 생성합니다. 이런 경우 마치 새로운 요소 세트가 스택으로 푸시되는 것처럼 각각의 연속적인 필터링 방법은 새로운 요소 세트를 스택으로 푸시합니다. 더 오래된 요소 세트가 필요한 경우 end ()를 사용하여 세트를 스택에서 다시 띄울 수 있습니다. "
Anthony Mason

1
이것이 iOS 용 PhoneGap의 jQuery Mobile에서 메뉴를 다시 작성하고 선택한 옵션을 변경할 수있는 유일한 방법이었습니다. 나중에 메뉴를 새로 고쳐야했습니다.
xited

3
@BrockHensley 당신은 심지어까지 갈 수있다.append($("<option></option>", {'value':'123'}).text('ABC!')
vahanpwns

710
$('#mySelect')
    .empty()
    .append('<option selected="selected" value="whatever">text</option>')
;

34
호기심에서 '찾기'보다 '빈'이 더 빠릅니까? 'find'는 selector를 사용하고 'empty'는 요소를 비우기 위해 무차별 강제하기 때문에 것 같습니다.
Dan Esparza

52
@ DanEsparza 나는 당신을 jsperf로 만들었다; empty()물론 더 빨랐다;) jsperf.com/find-remove-vs-empty
vzwick

이 솔루션으로 이상한 결함이 생겼습니다. 그것의 채우기 부분은 괜찮지 만 값을 선택하려고 할 때 (내 경우에는 하루) 값을 콘솔 로그 할 수 있지만 선택 필드에 표시된 값은 첫 번째 값에 유지됩니다. 해결되지
않음

5
@ TakácsZsolt 어쩌면 .val('whatever')Matt의 답변과 같이 체인 끝에 끝에를 추가해야 할 수도 있습니다 .
Kodos Johnson

.empty ()는 materialize와 함께 작동하지만 .remove ()는 작동하지 않음
OverlordvI

127

왜 일반 자바 스크립트를 사용하지 않습니까?

document.getElementById("selectID").options.length = 0;

7
나는 이것이 모든 옵션을 제거하는 가장 간단한 해결책이라는 데 동의하지만 질문의 절반 만 답합니다 ...
Elezar

2
메모리 누수가 발생하지 않습니까? 옵션 요소에 액세스 할 수 없지만 여전히 할당됩니다.
Synetech

1
평범한 JS FTW (For The Win) !!! :)
raddevus

78

첫 번째 옵션 (일반적으로 '항목을 선택하십시오'옵션)을 제외한 모든 옵션을 선택에서 제거하는 것이 목표 인 경우 다음을 사용할 수 있습니다.

$('#mySelect').find('option:not(:first)').remove();

10
이것이 답이되어야합니다. 다른 모든 사람들은 의도적으로 첫 번째를 제거하고 나중에 그것을 다시 만드는 관점에서 제거했습니다. 또한 첫 번째 옵션을 먼저 어딘가에 저장했음을 나타냅니다.

76

위의 jQuery 메소드를 사용 하면 DOM 에서 선택 이 지워지지 만 화면에는 표시되지 않는 IE7 (IE6에서는 잘 작동 함)에 버그가있었습니다 . IE Developer Toolbar를 사용하여 선택 항목이 지워지고 새 항목이 있음을 확인할 수 있었지만 시각적으로 선택하면 여전히 선택할 수 없었지만 이전 항목이 표시되었습니다.

해결 방법은 jQuery 대신 표준 DOM 메소드 / 프로퍼티 (포스터 원본과 동일)를 사용하여 지우는 것입니다. 여전히 jQuery를 사용하여 옵션을 추가했습니다.

$('#mySelect')[0].options.length = 0;

6
.empty ()로 인해 부모가 숨겨져있는 동안에도 숨겨진 컨테이너에 포함 된 선택 상자가 보이기 때문에 ie6에서도이 방법을 사용해야했습니다.
코드 사령관

2
이 방법은 또한 약간 (약 1 %) 더 성능이 좋은 것으로 판명
vzwick

3
+1 이것은 (제 생각에) 가장 읽기 쉽고 jsPerf 링크 (@vzwick linked)에서 허용 된 답변이 34 % 느 렸습니다 (Opera 20)
Morvael

35

어쨌든 기본적으로 선택되므로 "하나를 추가하고 선택하십시오"라는 말의 의미를 정확히 모릅니다. 그러나 둘 이상을 추가하는 경우 더 의미가 있습니다. 어때요?

$('select').children().remove();
$('select').append('<option id="foo">foo</option>');
$('#foo').focus();

"편집"에 대한 응답 : "이 선택 상자는 라디오 단추 세트로 채워져 있습니다"가 무슨 뜻인지 알 수 있습니까? <select>요소는 (법적으로) 포함 할 수 없습니다 <input type="radio">요소를.


27
$('#mySelect')
    .empty()
    .append('<option value="whatever">text</option>')
    .find('option:first')
    .attr("selected","selected")
;

2
우리는 여전히 IE6을 사용하고 있으며이 방법은 작동하지 않았습니다. 그러나, FF 3.5.6에서 일했다
제이 코베트

3
select의 변경을 트리거하기 위해 끝에 .change ()를 추가해야 할 수도 있습니다.
Hayden Chambers

22
$("#control").html("<option selected=\"selected\">The Option...</option>");

12

내가받은 답변 덕분에 내 요구에 맞는 다음과 같은 것을 만들 수있었습니다. 내 질문은 다소 모호했다. 연락해 주셔서 감사합니다. 마지막으로 선택한 문제에 "selected"를 포함시켜 최종 문제를 해결했습니다.

$(function() {
  $('#mySelect').children().remove().end().append('<option selected value="One">One option</option>') ; // clear the select box, then add one option which is selected
  $("input[name='myRadio']").filter( "[value='1']" ).attr( "checked", "checked" ); // select radio button with value 1
  // Bind click event to each radio button.
  $("input[name='myRadio']").bind("click",
                                  function() {
    switch(this.value) {
      case "1":
        $('#mySelect').find('option').remove().end().append('<option selected value="One">One option</option>') ;
        break ;
      case "2":
        $('#mySelect').find('option').remove() ;
        var items = ["Item1", "Item2", "Item3"] ; // Set locally for demo
        var options = '' ;
        for (var i = 0; i < items.length; i++) {
          if (i==0) {
            options += '<option selected value="' + items[i] + '">' + items[i] + '</option>';
          }
          else {
            options += '<option value="' + items[i] + '">' + items[i] + '</option>';
          }
        }
        $('#mySelect').html(options);   // Populate select box with array
        break ;
    } // Switch end
  } // Bind function end
                                 ); // bind end
}); // Event listener end
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>One<input  name="myRadio" type="radio" value="1"  /></label>
<label>Two<input name="myRadio"  type="radio" value="2" /></label>
<select id="mySelect" size="9"></select>


8

HTML을 새 데이터로 변경하는 것은 어떻습니까.

$('#mySelect').html('<option value="whatever">text</option>');

또 다른 예:

$('#mySelect').html('
    <option value="1" selected>text1</option>
    <option value="2">text2</option>
    <option value="3" disabled>text3</option>
');

8
  1. 먼저 모든 기존 옵션을 지우고 첫 번째 옵션을 실행하십시오 (-선택-)

  2. 루프를 하나씩 사용하여 새 옵션 값 추가

    $('#ddlCustomer').find('option:not(:first)').remove();
    for (var i = 0; i < oResult.length; i++) {
       $("#ddlCustomer").append(new Option(oResult[i].CustomerName, oResult[i].CustomerID + '/' + oResult[i].ID));
    }

7

나는 그물에서 아래와 같은 것을 발견했다. 옵션의 수천 내 상황 등으로이 훨씬 빨리보다 .empty()또는 .find().remove()jQuery를에서.

var ClearOptionsFast = function(id) {
    var selectObj = document.getElementById(id);
    var selectParentNode = selectObj.parentNode;
    var newSelectObj = selectObj.cloneNode(false); // Make a shallow copy
    selectParentNode.replaceChild(newSelectObj, selectObj);
    return newSelectObj;
}

자세한 내용은 여기를 참조하십시오 .



7
$("#id option").remove();
$("#id").append('<option value="testValue" >TestText</option>');

첫 번째 코드 줄은 옵션 찾기 기준이 언급되지 않았으므로 선택 상자의 모든 옵션을 제거합니다.

두 번째 코드 줄은 지정된 값 ( "testValue") 및 Text ( "TestText")로 Option을 추가합니다.


이 질문에 대한 답변이 될 수 있지만, 답변 방법에 대한 설명을 제공하면 훨씬 유용 합니다.
Nick

6

mauretto의 답변을 바탕으로 읽고 이해하는 것이 조금 더 쉽습니다.

$('#mySelect').find('option').not(':first').remove();

특정 값을 가진 옵션을 제외한 모든 옵션을 제거하려면 다음을 사용하십시오.

$('#mySelect').find('option').not('[value=123]').remove();

추가 할 옵션이 이미 있으면 더 좋습니다.


4

jquery prop () 을 사용하여 선택한 옵션을 지 웁니다.

$('#mySelect option:selected').prop('selected', false);

1
.prop ()는 jQuery 1.6 이상에서만 적용됩니다. jQuery 1.5-의 경우 .attr ()
Agi Hammerthief

4

기존 mySelect가 새 mySelect로 바뀝니다.

$('#mySelect').replaceWith('<Select id="mySelect" size="9">
   <option value="whatever" selected="selected" >text</option>
   </Select>');

4

당신은 단순히 HTML을 교체하여 할 수 있습니다

$('#mySelect')
.html('<option value="whatever" selected>text</option>')
.trigger('change');

4

select 태그에서 모든 옵션을 제거하려면 한 줄만 입력하고 옵션을 추가 한 후 두 번째 줄을 만들어 옵션을 추가하십시오.

$('.ddlsl').empty();

$('.ddlsl').append(new Option('Select all', 'all'));

2
  • 객체에 추가 할 옵션 값을 저장
  • select 태그에서 기존 옵션 지우기
  • 목록 객체를 반복하고 원하는 select 태그에 내용을 추가하십시오.

var listToAppend = {'':'Select Vehicle','mc': 'Motor Cyle', 'tr': 'Tricycle'};

$('#selectID').empty();

$.each(listToAppend, function(val, text) {
    $('#selectID').append( new Option(text,val) );
  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>



1

그것이 효과가 있기를 바랍니다.

$('#myselect').find('option').remove()
.append($('<option></option>').val('value1').html('option1'));

옵션이 두 번째 옵션을 선택할 수없는 경우 작동합니다.
Anburaj_N

0
var select = $('#mySelect');
select.find('option').remove().end()
.append($('<option/>').val('').text('Select'));
var data = [{"id":1,"title":"Option one"}, {"id":2,"title":"Option two"}];
for(var i in data) {
    var d = data[i];
    var option = $('<option/>').val(d.id).text(d.title);
    select.append(option);
}
select.val('');
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.