1. ホーム
  2. ジャバスクリプト

[解決済み】javascriptで選択するオプションを追加する。

2022-04-12 14:25:45

質問

id="mainSelect"を持つselectに12から100までのオプションを作成するjavascriptが欲しいのですが、すべてのオプションタグを手動で作成したくないので、このようにしました。いくつかのポインタを与えることができますか?ありがとうございます。

function selectOptionCreate() {

  var age = 88;
  line = "";
  for (var i = 0; i < 90; i++) {
    line += "<option>";
    line += age + i;
    line += "</option>";
  }

  return line;
}

解決方法は?

を使えば、簡単に実現できます。 for のループになります。

var min = 12,
    max = 100,
    select = document.getElementById('selectElementId');

for (var i = min; i<=max; i++){
    var opt = document.createElement('option');
    opt.value = i;
    opt.innerHTML = i;
    select.appendChild(opt);
}

JSフィドルデモ .

JS パーフ との比較 シメビダスさんの回答 というのも、彼の方が少し理解しやすく直感的に見えると思ったからで、それが実装にどう反映されるか気になったからです。Chromium 14/Ubuntu 11.04によると、私の方がいくらか速いようです。


編集 OPからのコメントを受けて。

[これを複数の要素に適用するにはどうしたらいいですか?

function populateSelect(target, min, max){
    if (!target){
        return false;
    }
    else {
        var min = min || 0,
            max = max || min + 100;

        select = document.getElementById(target);

        for (var i = min; i<=max; i++){
            var opt = document.createElement('option');
            opt.value = i;
            opt.innerHTML = i;
            select.appendChild(opt);
        }
    }
}
// calling the function with all three values:
populateSelect('selectElementId',12,100);

// calling the function with only the 'id' ('min' and 'max' are set to defaults):
populateSelect('anotherSelect');

// calling the function with the 'id' and the 'min' (the 'max' is set to default):
populateSelect('moreSelects', 50);

JSフィドルデモ .

そして、最後に(かなり遅れましたが...)、このプロトタイプを拡張するアプローチです。 HTMLSelectElement を連鎖させるために populate() 関数を、メソッドとして DOM ノードに追加します。

HTMLSelectElement.prototype.populate = function (opts) {
    var settings = {};

    settings.min = 0;
    settings.max = settings.min + 100;

    for (var userOpt in opts) {
        if (opts.hasOwnProperty(userOpt)) {
            settings[userOpt] = opts[userOpt];
        }
    }

    for (var i = settings.min; i <= settings.max; i++) {
        this.appendChild(new Option(i, i));
    }
};

document.getElementById('selectElementId').populate({
    'min': 12,
    'max': 40
});

JSフィドルデモ .

参考文献