드롭 다운 상자에서 모든 옵션을 지우려면 어떻게합니까?


153

내 코드는 IE에서는 작동하지만 Safari, Firefox 및 Opera에서는 작동하지 않습니다. (큰 놀라움)

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

검색 한 후, length=0그것이 마음에 들지 않는다는 것을 알게되었습니다 .
나는 해봤 ...options=nullvar clear=0; ...length=clear같은 결과.

한 번에 여러 객체 에이 작업을 수행하므로 경량 JS 코드를 찾고 있습니다.


모든 옵션 (!?) 을 삭제 하고 새로 고침 페이지 후 선택한 옵션의 브라우저 기록을 재설정하려면 HTML의 <option selected>?? (Google은 여기에 있지만 여기에 없습니다) ... document.getElementById ( "form1"). reset () 실제 솔루션을 참조하십시오.
Peter Krauss

답변:


35

다음을 사용하여 모든 요소를 ​​지울 수 있습니다.

var select = document.getElementById("DropList");
var length = select.options.length;
for (i = length-1; i >= 0; i--) {
  select.options[i] = null;
}

14
Mootools의도있다 empty(), 그래서 당신은 할 것$("DropList").empty();
브라이언 Koser

42
이것은 나쁜 생각처럼 보입니다. 항목을 null로 설정하는 것은 항목을 제거하는 것과 다릅니다.

9
또한 예상대로 작동하지 않습니다. 해당 코드를 사용하면 하나의 객체가 드롭 다운됩니다.
gabrjan

9
이 코드는 충돌 할 수 있습니다. 루프를 반대로 실행하는 가장 안전한 방법입니다.
Kangkan

19
더 좋은 방법은 다른 답변을 확인하십시오.
Tim Cavanaugh

296

의 HTML 요소 옵션을 제거하려면 select다음 remove()방법을 사용할 수 있습니다 .

function removeOptions(selectElement) {
   var i, L = selectElement.options.length - 1;
   for(i = L; i >= 0; i--) {
      selectElement.remove(i);
   }
}

// using the function:
removeOptions(document.getElementById('DropList'));

options거꾸로 제거하는 것이 중요 합니다. 이 remove()방법은 options컬렉션을 재정렬합니다 . 이런 식으로 제거 할 요소가 여전히 존재 함을 보장합니다!


9
@Fabiano를 응원합니다. 다른 제안과 달리 실제로 항목을 제거합니다.
Constanta

4
여기서 핵심은 selectbox의 역방향 순회입니다. 옵션 ....이 방법은 순방향 순회를 시도했을 때 실패했습니다
scottysseus

7
예, remove () 메소드가 배열을 재정렬하기 때문에 실패합니다. 거꾸로하면 제거 할 요소가 존재합니다.
Fabiano

selectbox.options.length = 0 추가하기; 정의가 끝나면 모든 브라우저에서 완벽하게 만들 수 있습니다.
omkar sirra

4
간단한 코드는 while (selectEl.options.length) selectEl.options.remove (0)
MiF

127

간단한 스크립트를 원한다면 jQuery로 가십시오. jQuery에서 모든 옵션을 제거하는 솔루션은 다음과 같습니다.

$("#droplist").empty();

46
나는 jQuery를 추가하는 바로 그 동작이 "가벼운"의 반대라고 주장한다 for (a in select.options) { select.options.remove(0); }.
Artog

7
상황에 따라 다릅니다. 웹 응용 프로그램에서 가독성은 $("#droplist").empty();수천 줄의 바닐라 JS와 비교하여 100 줄의 유형 코드로 jQuery를 추가 할 가치가 있습니다. 간단한 웹 페이지에 대한 마크 업 / 화장품을 이야기하고 있다면 100 % 정확합니다.
Half_Duplex

3
@AdamIngmansson 사람들이 JQuery 사용을 거부하면 당혹 스럽습니다. JQ의 엔지니어가 주어진 (유틸리티) 작업을 수행하는 가장 빠르고 가장 빠르고 가장 안정적인 방법을 찾기 위해 모든 종류의 테스트를 수행했다는 가정하에 이와 같은 방법을 사용합니다. JQ (또는 좋은 라이브러리)의 요점은 일상적인 작업을 수행하여 흥미로운 것에 집중할 수 있도록하는 것입니다.
마이크 설치류

2
@mikerodent 나는 그 기능 자체가 최고 품질과 성능이라는 것을 의심의 여지가 없다. 그러나 작은 기능을 위해 86kb (버전 3.2.1의 압축 된 lib) 파일을로드하는 것은 '경량'이 아닙니다 :) 물론 다른 많은 기능을 사용하는 경우 jQuery를 사용하는 것이 좋습니다. 아주 좋은 도서관입니다
Artog

1
@AdamIngmansson 박람회! 그러나 JQ min.js 파일이 너무 자주 사용되어 브라우저 캐시에서 자주 발견된다는 것을 알고 있습니다. "항상 JQ를 사용하고이를 최적화 단계의 일부로 사용하지 않는 것으로 간주하는 경우"라고 말하면 좋은 주장 일 수 있습니다. 특정 상황 (전화 앱 등)에서 실제로 필요할 수도 있습니다 ... 이것은 내 고상한 JS 지식을 넘어서는 것입니다.
마이크 설치류

105

아마도 가장 깨끗한 솔루션은 아니지만 하나씩 제거하는 것보다 훨씬 간단합니다.

document.getElementById("DropList").innerHTML = "";

나는 보통 전염병처럼 innertHTML을 피합니다. 그러나 이것은 내가 실제로 좋아하는 것을 훨씬 간단하게 만듭니다.
petersaints 2009 년

나는 이것을 작동시킬 수 없었다. 이 방법으로 선택 옵션이 지워지지 않는 이유를 잘 모르겠습니다.
MikaelL

@MikaelL, 브라우저에서 어떤 브라우저를 추가하면 유용합니다. 기억할 수있는 버전도 있습니다.
사용자

70

이것이 가장 좋은 방법입니다.

function (comboBox) {
    while (comboBox.options.length > 0) {                
        comboBox.remove(0);
    }        
}

'for () {selectbox.remove ()}'메커니즘으로 인해 모든 옵션이 지워지지 않기 때문에 오늘 저를 구했습니다. 감사.
sonlexqt

4
약간 짧음while (comboBox.options.length) comboBox.remove(0);
EkriirkE

31

이것은 짧은 방법입니다.

document.getElementById('mySelect').innerText = null

한 줄, 아니요, JQuery 없음, 단순


가장 짧지는 않지만 아래 답변을 참조하십시오 .
사용자

16
function removeOptions(obj) {
    while (obj.options.length) {
        obj.remove(0);
    }
}

1
이 솔루션은 나를 위해 유일한 솔루션입니다. Iceweasel 10.0.12 및 Chrome 26.
davide

16

원래 질문의 문제는 오늘날 더 이상 관련이 없다는 것을 지적하고 싶습니다. 그리고 그 솔루션의 버전이 더 짧습니다.

selectElement.length = 0;

두 버전 모두 Firefox 52, Chrome 49, Opera 36, ​​Safari 5.1, IE 11, Edge 18, Android의 최신 버전의 Chrome, Firefox, Samsung Internet 및 UC Browser, iPhone 6S의 Safari, Android 4.2에서 작동하는지 테스트했습니다. 2 재고 브라우저. 현재 모든 장치와 완벽하게 호환된다고 결론을 내릴 수 있다고 생각 하므로이 방법을 권장합니다.


11

이것은 약간 현대적이고 순수한 JavaScript입니다.

document.querySelectorAll('#selectId option').forEach(option => option.remove())


1
가장 빠른 코드. 테스트를 위해 약 250000 개의 옵션을 제거하십시오
Andrej

7

PrototypeJS :

$('yourSelect').select('option').invoke('remove');

6

JQuery를 사용하고 있고 선택 컨트롤에 ID "DropList"가있는 경우 다음과 같은 방법으로 옵션을 제거 할 수 있습니다.

$('#DropList option').remove();

실제로 그것은 datalist와 같은 옵션 목록으로 저에게 효과적입니다.

도움이 되길 바랍니다.


5
좋은 답변에는 이것보다 자세한 내용이 포함되어야합니다. 독자는 아마도 jQuery를 의미 할지도 모른다.
Mifeet

5
@Mifeet 사용자가 JQuery가 무엇을 의미하는지 모른다면 커리어를 바꿔야합니다
Emilio Gort

6

select는
-optgroup & -options
컬렉션
을 자식으로 가질 수 있습니다 .

그래서,

방법 # 1

var selectElement = document.getElementById('myselectid');
selectElement.innerHTML = '';

방법 # 2

var selectElement = document.getElementById('myselectid');
selectElement.textContent = '';

두 가지 모두 Chrome에서 작동합니다.
나는 더 단순하고 구식 인 방법 # 1을 좋아한다.


1
이것이 가장 좋은 대답입니다. 또한 이미 select에 대한 jquery 참조가있는 경우$select.html('')
the_nuts

5

시험

document.getElementsByTagName("Option").length=0

또는 removeChild () 함수를 살펴보십시오.

또는 jQuery 프레임 워크를 사용하는 경우

$("DropList Option").each(function(){$(this).remove();});

4

JQuery를 사용하는 것이 더 예쁘고 짧고 똑똑한 방법입니다!

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

1
이것은 실제로이 기존의 대답 의 반복 일뿐 입니다.
Pang

4

옵션을 지우는 데 사용할 수 있습니다.

function clearDropDown(){
  var select = document.getElementById("DropList"),
      length = select.options.length;
  while(length--){
    select.remove(length);
  }
}
<select id="DropList" >
  <option>option_1</option>
  <option>option_2</option>
  <option>option_3</option>
  <option>option_4</option>
  <option>option_5</option>
</select>
<button onclick="clearDropDown()">clear list</button>


3

반대로 가십시오. 이유는 각 제거 후 크기가 감소하기 때문입니다.

for (i = (len-1); i > -1; i--) {
    document.getElementById("elementId").remove(i);
}

3
var select = document.getElementById("DropList");
var length = select.options.length;
for (i = 0; i < length; i++) {
  select.options[i].remove();
}

희망,이 코드는 당신을 도울 것입니다



2

가장 간단한 솔루션이 최고이므로 다음과 같이하면됩니다.

var list = document.getElementById('list');
while (list.firstChild) {
    list.removeChild(list.firstChild);
}
<select id="list">
  <option value="0">0</option>
  <option value="1">1</option>
</select>


2

항목을 반대로 제거해야합니다. 그렇지 않으면 오류가 발생합니다. 또한 단순히 값을로 설정하지 않는 것이 좋습니다 null. 예기치 않은 동작이 발생할 수 있습니다.

var select = document.getElementById("myselect");
for (var i = select.options.length - 1 ; i >= 0 ; i--)
    select.remove(i);

또는 원하는 경우 기능으로 만들 수 있습니다.

function clearOptions(id)
{
    var select = document.getElementById(id);
    for (var i = select.options.length - 1 ; i >= 0 ; i--)
        select.remove(i);
}
clearOptions("myselect");

1
var select = document.getElementById('/*id attribute of your select here*/');
for (var option in select){
    select.remove(option);
}

1

위의 답변 코드는 목록을 완성하기 위해 약간의 변경이 필요합니다.이 코드를 확인하십시오.

var select = document.getElementById("DropList");
var length = select.options.length;
for (i = 0; i < length;) {
  select.options[i] = null;
  length = select.options.length;
}

길이를 새로 고치면 드롭 다운 목록에서 모든 데이터가 제거됩니다. 이것이 누군가를 도울 수 있기를 바랍니다.


멋진 추가-매번 모든 옵션을 제거하지 않은 이유에 대해 잠시 동안 충격을 받았습니다.
Ralpharoo

0
while(document.getElementById("DropList").childNodes.length>0) 
{
    document.getElementById("DropList").removeChild(document.getElementById("DropList").childNodes[0]);
}

0

IE를 지원해야하고 선택 목록에 100 개가 넘는 항목이있는 경우 선택을 다음과 같은 함수로 바꾸는 것이 좋습니다.

function clearOptions(select) {
    var selectParentNode = select.parentNode;
    var newSelect = select.cloneNode(false); // Make a shallow copy
    selectParentNode.replaceChild(newSelect, select);
    return newSelect;
}

select 매개 변수는 jquery 선택기 또는 document.getElementBy 호출의 요소 여야합니다. 이것의 유일한 단점은 선택에 연결 된 이벤트를 잃어 버린다는 것이지만 함수에서 다시 반환되면 쉽게 다시 연결할 수 있습니다. ~ 3k 항목이있는 선택 작업을하고 있었고 IE9에서 선택을 지우려면 4 초가 걸리므로 새 내용으로 업데이트 할 수 있습니다. 이런 식으로 거의 즉시 수행합니다.


자세한 정보는 여기에서 찾을 수 있습니다 : somacon.com/p542.php 및 더 간단한 방법 :$('#selectbox').replaceWith($('#selectbox')[0].cloneNode(false));
FDisk

0

Vanilla JavaScript에는 간단하고 우아한 방법이 있습니다.

for(var o of document.querySelectorAll('#DropList > option')) {
  o.remove()
}

-1

오늘도 같은 문제에 직면했습니다. 선택 상자를 다시로드하는 동안 아래와 같이했습니다. (Plain JS에서)

        var select = document.getElementById("item");
        select.options.length = 0;
        var opt = document.createElement('option');
        opt.value = 0;
        opt.innerHTML = "Select Item ...";
        opt.selected = "selected";
        select.appendChild(opt);


       for (var key in lands) {
            var opt = document.createElement('option');
            opt.value = lands[key].id;
            opt.innerHTML = lands[key].surveyNo;
            select.appendChild(opt);

        }

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