如何以编程方式添加下拉列表(<select>)?

Chr*_*tis 53 html javascript html-select drop-down-menu

我想创建一个函数,以编程方式在页面上添加一些元素.

假设我想添加一个包含四个选项的下拉列表:

<select name="drop1" id="Select1">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

tym*_*eJV 153

这将工作(纯JS,附加到id的div myDiv):

var myParent = document.body;

//Create array of options to be added
var array = ["Volvo","Saab","Mercades","Audi"];

//Create and append select list
var selectList = document.createElement("select");
selectList.id = "mySelect";
myParent.appendChild(selectList);

//Create and append the options
for (var i = 0; i < array.length; i++) {
    var option = document.createElement("option");
    option.value = array[i];
    option.text = array[i];
    selectList.appendChild(option);
}
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/4pwvg/

  • 这是一个奇迹!非jQuery解决方案.您可能只想设置属性,而不是使用`setAttribute()`设置属性.并不重要,但使用`new Option(text,value)`是创建`<option>`元素的一个很好的捷径 (13认同)
  • +1,四个选项中只有一个是javascritpt .. jquery是多么受欢迎... (6认同)
  • @Ian - 感谢提示,仍然学习纯JS,不幸的是首先学习jQuery,试图能够在纯JS中做所有事情也有点棘手:) (3认同)
  • 您还可以使用`selectList.add(option)`([spec](http://www.w3.org/TR/html5/forms.html#dom-select-add)添加选项(向上滚动) ,[mdn](https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement#add())) (3认同)

7st*_*tud 10

var sel = document.createElement('select');
sel.name = 'drop1';
sel.id = 'Select1';

var cars = [
  "volvo",
  "saab",
  "mercedes",
  "audi"
];

var options_str = "";

cars.forEach( function(car) {
  options_str += '<option value="' + car + '">' + car + '</option>';
});

sel.innerHTML = options_str;


window.onload = function() {
  document.body.appendChild(sel);
};
Run Code Online (Sandbox Code Playgroud)

  • @RomanNewaza,检查速度,将 forEach 循环替换为常规的旧 for 循环。 (2认同)

iCo*_*nor 5

我很快就做了一个可以实现这一点的函数,它可能不是最好的方法,但它只是有效并且应该是跨浏览器的,还请知道我不是 JavaScript 专家,所以任何提示都很棒:)

纯 Javascript 创建元素解决方案

function createElement(){
    var element  = document.createElement(arguments[0]),
        text     = arguments[1],
        attr     = arguments[2],
        append   = arguments[3],
        appendTo = arguments[4];

    for(var key = 0; key < Object.keys(attr).length ; key++){
        var name = Object.keys(attr)[key],
             value = attr[name],
             tempAttr = document.createAttribute(name);
             tempAttr.value = value;
        element.setAttributeNode(tempAttr)
    }
    
    if(append){
        for(var _key = 0; _key < append.length; _key++) {
            element.appendChild(append[_key]);
        }
    }

    if(text) element.appendChild(document.createTextNode(text));

    if(appendTo){
        var target = appendTo === 'body' ? document.body : document.getElementById(appendTo);
        target.appendChild(element)
    }       

    return element;
}
Run Code Online (Sandbox Code Playgroud)

让我们看看我们如何做到这一点

<select name="drop1" id="Select1">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>
Run Code Online (Sandbox Code Playgroud)

这是它的工作原理

    var options = [
        createElement('option', 'Volvo', {value: 'volvo'}),
        createElement('option', 'Saab', {value: 'saab'}),
        createElement('option', 'Mercedes', {value: 'mercedes'}),
        createElement('option', 'Audi', {value: 'audi'})
    ];


    createElement('select', null, // 'select' = name of element to create, null = no text to insert
        {id: 'Select1', name: 'drop1'}, // Attributes to attach
        [options[0], options[1], options[2], options[3]], // append all 4 elements
        'body' // append final element to body - this also takes a element by id without the #
    );
Run Code Online (Sandbox Code Playgroud)

这是参数

createElement('tagName', 'Text to Insert', {any: 'attribute', here: 'like', id: 'mainContainer'}, [elements, to, append, to, this, element], 'body || container = where to append this element');
Run Code Online (Sandbox Code Playgroud)

如果您必须附加许多元素,此功能将适用,如果有任何方法可以改进此答案,请告诉我。

编辑:

这是一个工作演示

JSFiddle 演示

这可以高度定制以适合您的项目!