Adding options to select with javascript

后端 未结 9 1160
执念已碎
执念已碎 2020-11-22 15:40

I want this javascript to create options from 12 to 100 in a select with id=\"mainSelect\", because I do not want to create all of the option tags manually. Can you give me

9条回答
  •  时光说笑
    2020-11-22 15:59

    You could achieve this with a simple for loop:

    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 Fiddle demo.

    JS Perf comparison of both mine and Sime Vidas' answer, run because I thought his looked a little more understandable/intuitive than mine and I wondered how that would translate into implementation. According to Chromium 14/Ubuntu 11.04 mine is somewhat faster, other browsers/platforms are likely to have differing results though.


    Edited in response to comment from OP:

    [How] do [I] apply this to more than one element?

    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 Fiddle demo.

    And, finally (after quite a delay...), an approach extending the prototype of the HTMLSelectElement in order to chain the populate() function, as a method, to the DOM node:

    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 Fiddle demo.

    References:

    • node.appendChild().
    • document.getElementById().
    • element.innerHTML.

提交回复
热议问题