ドロップダウンボックスのすべてのオプションをクリアするにはどうすればよいですか?


153

私のコードはIEでは機能しますが、Safari、Firefox、Operaでは機能しません。(ビッグサプライズ)

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

調べてみたら、嫌いなものだとわかりましたlength=0
私が試した...options=nullvar clear=0; ...length=clear同じ結果に。

私は一度に複数のオブジェクトに対してこれを行っているので、軽量のJSコードを探しています。


すべてのオプションを破棄するには(!?)、ブラウザの選択したオプションの履歴をページの更新後にリセットして、HTMLの <option selected>?? (グーグルはここに私たちを置きますが、ここにはありません)... document.getElementById( "form1")。reset()の実際のソリューションを参照してください。
Peter Krauss

回答:


34

以下を使用して、すべての要素をクリアできます。

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();
ブライアンコーザー

42
これは悪い考えのようです。アイテムをnullに設定することは、アイテムを削除することと同じではありません。

9
また、期待どおりに機能しません。そのコードを使用すると、ドロップダウンに1つのオブジェクトが残ります。
gabrjan 2013

9
このコードはクラッシュする可能性があります。ループを逆に実行する最も安全な方法。
カンカン2014年

19
これを行うためのより良い方法については、他の回答を確認してください。
Tim Cavanaugh、2014

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を応援します。これにより、他の提案とは対照的にアイテムが実際に削除されます。
コンスタンツァ

4
ここで重要なのは、selectbox.optionsの逆方向トラバーサルです...正方向トラバーサルを試したところ、このソリューションは失敗しました
scottysseus

7
はい、remove()メソッドが配列を再配置するため、失敗します。逆方向に実行すると、削除される要素が存在することが保証されます。
Fabiano 2016年

selectbox.options.length = 0;を追加します。定義の最後には、すべてのブラウザで完璧になる可能性があります。
omkar sirra 2017

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 2014

7
状況によります。Webアプリケーションでは、何百行も$("#droplist").empty();のバニラJSに比べて100行のタイプコードが読みやすいため、jQueryを追加する価値があります。単純なWebページのマークアップ/化粧品の場合は、100%正解です。
Half_Duplex

3
@AdamIngmansson人々がJQueryの使用を否定するとき、私はそれが不可解だと思います。私は、JQの背後にいるエンジニアがあらゆる種類のテストを行って、特定の(ユーティリティ)タスクを実行するための最も信頼性の高い、最も高速な手段を見つけることを前提に、このような方法を使用します。JQ(または任意の優れたライブラリ)のポイントは、日常的なタスクを実行して、興味深いことに集中できるようにすることです。
マイクげっ歯類2017

2
@mikerodent機能自体が最高の品質とパフォーマンスであることは間違いありません。しかし、その小さな機能のためだけに86kb(バージョン3.2.1の圧縮されたlib)ファイルをロードすることは「軽量」ではありません:)もちろん、他の多くの機能を使用している場合、jQueryを使用する価値があります。これは非常に優れたライブラリです
Artog '8/08/17

1
@AdamIngmanssonフェアは十分!ただし、JQのmin.jsファイルが使用されていることがよくあるため、ブラウザのキャッシュで非常に頻繁に使用されています。「常にJQを使用し、これを最適化ステージの一部として使用しないことを検討してください。これが本当に必要であることが判明した場合」というのは、おそらく良い議論になるでしょう。確かに、特定のコンテキスト(電話アプリなど)で必要となる可能性があります。これは、私のちょっとしたJSの知識を超えています。
マイクげっ歯類

105

おそらく、最もクリーンなソリューションではありませんが、1つずつ削除するよりも間違いなく簡単です。

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

通常、ペストのようなinnertHTMLは避けます。しかし、これは物事をとても単純にするので、私は実際にそれが好きです。
petersaints

これを機能させることができませんでした。なぜこの方法で選択オプションがクリアされないのかわかりません。
MikaelL

@MikaelL、それが発生するブラウザーを追加すると便利です。また、そのバージョンを覚えておくことができます。
ユーザー

70

これが最善の方法です。

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

「for(){selectbox.remove()}」メカニズムではどういうわけかすべてのオプションがクリアされないため、これで今日は助かりました。ありがとう。
sonlexqt 2015

4
少し短いwhile (comboBox.options.length) comboBox.remove(0);
EkriirkE 2017


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

1
この解決策は私にとって有効な唯一の解決策です。Iceweasel 10.0.12とChrome
26。–

16

元の質問の問題は、今日は関係がないことを指摘しておきます。そして、そのソリューションのさらに短いバージョンがあります:

selectElement.length = 0;

私は、両方のバージョンがFirefox 52、Chrome 49、Opera 36、Safari 5.1、IE 11、Edge 18、Androidの最新バージョンのChrome、Firefox、Samsungインターネット、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 2015年

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

これは、オプションをクリアするために使用できます。

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 2015

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

0

IEをサポートする必要があり、選択リストに100を超える項目がある場合は、selectを次のような関数に置き換えることを強くお勧めします。

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呼び出しからの要素である必要があります。これの唯一の欠点は、selectに配線したイベントが失われることですが、関数から戻されたときに簡単に再アタッチできます。私は〜3kのアイテムを含む選択で作業しており、IE9で選択をクリアして新しいコンテンツで更新できるようにするのに4秒かかりました。この方法でほぼ瞬時に実行できます。


あなたはここでより多くの情報を見つけることができます:somacon.com/p542.phpともっと簡単な方法:$('#selectbox').replaceWith($('#selectbox')[0].cloneNode(false));
FDisk

0

バニラJavaScriptの場合、これを行うシンプルでエレガントな方法があります。

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

-1

今日私は同じ問題に直面していました、私は選択ボックスをリロードしている間以下のようにしました (プレーン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.