How do I clear all options in a dropdown box?

烂漫一生 提交于 2019-11-26 05:18:41

问题


My code works in IE but breaks in Safari, Firefox, and Opera. (big surprise)

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

After searching, I\'ve learned that it\'s the length=0 that it doesn\'t like.
I\'ve tried ...options=null and var clear=0; ...length=clear with the same result.

I am doing this to multiple objects at a time, so I am looking for some lightweight JS code.


回答1:


You can use the following to clear all the elements. Note that

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



回答2:


To remove the options of a select html object, you can use this piece of code:

function removeOptions(selectbox)
{
    var i;
    for(i = selectbox.options.length - 1 ; i >= 0 ; i--)
    {
        selectbox.remove(i);
    }
}
//using the function:
removeOptions(document.getElementById("mySelectObject"));

This will work in all browsers. =)




回答3:


If you wish to have a lightweight script, then go for jQuery. In jQuery, the solution for removing all options will be like:

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



回答4:


Probably, not the cleanest solution, but it is definitely simpler than removing one-by-one:

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



回答5:


This is the best way :

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



回答6:


This is the shortest way:

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

One line, no for, no JQuery, simple.




回答7:


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



回答8:


This is a bit modern and pure JavaScript

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




回答9:


with PrototypeJS :

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



回答10:


If you are using JQuery and your select control has ID "DropList" you can remove its options doing this way:

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

Actually it works for me with any option list, like datalist.

Hope it helps.




回答11:


Note that a select can have both
- optgroup &
- options collection
as its children.

So,

Method #1

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

Method #2

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

I tested, both work on Chrome.
I like the simpler, the old fashioned, method #1.




回答12:


I'd like to point out that the problem in the original question is not relevant today anymore. And there is even shorter version of that solution:

selectElement.length = 0;

I've tested that both versions work in Firefox 52, Chrome 49, Opera 36, Safari 5.1, IE 11, Edge 18, latest versions of Chrome, Firefox, Samsung Internet and UC Browser on Android, Safari on iPhone 6S, Android 4.2.2 stock browser. I think it is safe to conclude that it's absolutely compatible with whatever device there is right now, so I recommend this approach.




回答13:


Try

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

Or maybe look into the removeChild() function.

Or if you use jQuery framework.

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



回答14:


Using JQuery is a prettier, shorter & smarter way to do it!

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



回答15:


Go reverse. Reason is size decreases after each remove.

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



回答16:


This can be used to clear options:

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>



回答17:


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

Hope, this code will helps you




回答18:


I think that is the best sol. is

 $("#myselectid").html(''); 



回答19:


The simplest solutions are the best, so You just need:

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>



回答20:


The items should be removed in reverse, otherwise it will cause an error. Also, I do not recommended simply setting the values to null, as that may cause unexpected behaviour.

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

Or if you prefer, you can make it a function:

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



回答21:


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



回答22:


Above answer's code need a slight change to remove the list complete, please check this piece of code.

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

refresh the length and it will remove all the data from drop down list. Hope this will help someone.




回答23:


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



回答24:


If you have to support IE and you have more than 100 items in your select list, I strongly recommend you consider replacing the select with a function like so:

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

The select parameter should be the element either from a jquery selector or document.getElementBy call. The only downside to this is that you lose events you had wired up to the select, but you can easily reattach them as it is returned back out of the function. I was working with a select that had ~3k items and it would take 4 seconds on IE9 to clear the select so I could update it with the new content. Nearly instant doing it this way.




回答25:


Today I was facing same problem, I did as below while reloading select box. (In 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);

        }



回答26:


var select =$('#selectbox').val();


来源:https://stackoverflow.com/questions/3364493/how-do-i-clear-all-options-in-a-dropdown-box

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!