我想这个javascript创建选项从12到100在一个选择id="mainSelect",因为我不想手动创建所有的选项标签。你能给我一些建议吗?谢谢

function selectOptionCreate() {

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

  return line;
}

当前回答

通常你有一个相关记录的数组,我发现用这种方式填充select很简单,而且相当声明性:

selectEl.innerHTML = array.map(c => '<option value="'+c.id+'">'+c.name+'</option>').join('');

这将取代现有的选项。 你可以使用selectEl。insertAdjacentHTML (afterbegin, str);把它们加到最上面。 和selectEl。insertAdjacentHTML (beforeend, str);将它们添加到列表的底部。

兼容IE11的语法:

array.map(function (c) { return '<option value="'+c.id+'">'+c.name+'</option>'; }).join('');

其他回答

以上的方法对我来说都没用。附加方法没有给出错误时,我尝试了,但它没有解决我的问题。最后,我用select2的数据属性解决了我的问题。我使用json,得到数组,然后在select2元素初始化中给出它。要了解更多细节,你可以在下面的帖子中看到我的答案。

https://stackoverflow.com/a/41297283/4928277

参见:用jQuery从数组中添加选项的最佳方法是什么?

$('#mySelect')
      .append($('<option>', { value : key })
      .text(value)); 

我不建议在循环中进行DOM操作——这在大型数据集中成本很高。相反,我会这样做:

var elMainSelect = document.getElementById('mainSelect');

function selectOptionsCreate() {
  var frag = document.createDocumentFragment(),
    elOption;
  for (var i=12; i<101; ++i) {
    elOption = frag.appendChild(document.createElement('option'));
    elOption.text = i;
  }
  elMainSelect.appendChild(frag);
}

你可以在MDN上阅读更多关于DocumentFragment的内容,以下是它的要点:

它被用作Document的轻量级版本,用于存储 像标准文档一样由节点组成的文档结构。 关键的区别在于,因为文档片段不是 实际DOM的结构,对片段所做的更改不会影响 文档,导致回流,或招致任何性能影响 在进行更改时发生。

你可以用一个简单的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性能比较我和Sime Vidas的答案,运行是因为我认为他看起来比我的更容易理解/直观,我想知道这将如何转化为实现。根据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小提琴演示。

引用:

node.appendChild()。 . getelementbyid()。 element.innerHTML。

For(设I = 12;我< 101;我+ +){ 让HTML = "" HTML += ' <选项值= " ${我}" > ${我}> < /选项 ` mainSelect。innerHTML += html } const mainSelect = document.getElementById("mainSelect") 这是一种非常简单易懂的解决问题的方法!希望它能起作用:)