webentwicklung-frage-antwort-db.com.de

Wie kann ich eine Dropdown-Liste (<select>) programmgesteuert hinzufügen?

Ich möchte eine Funktion erstellen, um Elemente programmgesteuert auf einer Seite hinzuzufügen. 

Nehmen wir an, ich möchte eine Dropdown-Liste mit vier Optionen hinzufügen:

<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>

Wie kann ich das machen?

41

Das wird funktionieren (pure JS, Anhängen an ein Div von id myDiv):

var myDiv = document.getElementById("myDiv");

//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";
myDiv.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);
}

Demo: http://jsfiddle.net/4pwvg/

131
tymeJV
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);
};
7
7stud

Ich habe schnell eine Funktion erstellt, mit der dies erreicht werden kann. Dies ist möglicherweise nicht der beste Weg, dies zu tun, aber es funktioniert einfach und sollte Cross-Browser sein. Bitte beachten Sie, dass ich KEIN Experte für JavaScript bin.

Pure Javascript Create Element Solution

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;
}

mal sehen, wie wir das machen 

<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>

so funktioniert das

    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 #
    );

das sind die params

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

Diese Funktion würde passen, wenn Sie viele Elemente anhängen müssen. Wenn Sie die Antwort verbessern können, lassen Sie es mich wissen.

bearbeiten:

Hier ist eine funktionierende Demo 

JSFiddle Demo

Dies kann stark an Ihr Projekt angepasst werden!

2
iConnor

Hier ist eine ES6-Version der Antwort von 7stud .

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

const cars = [
  "Volvo",
  "Saab",
  "Mercedes",
  "Audi",
];

const options = cars.map(car => {
  const value = car.toLowerCase();
  return `<option value="${value}">${car}</option>`;
});

sel.innerHTML = options;

window.onload = () => document.body.appendChild(sel);
1

Dieser Code erstellt dynamisch eine Auswahlliste. Zuerst erstelle ich ein Array mit den Fahrzeugnamen. Zweitens erstelle ich ein select-Element dynamisch, ordne es einer Variablen "sEle" zu und hänge es an den Hauptteil des HTML-Dokuments an. Dann verwende ich eine for-Schleife, um das Array zu durchlaufen. Drittens erstelle ich das Optionselement dynamisch und ordne es einer Variablen "oEle" zu. Mit einer if-Anweisung weise ich dem ersten Optionselement [0] die Attribute 'disabled' und 'selected' zu, damit es immer ausgewählt wird und deaktiviert ist. Ich erstelle dann ein Textknotenarray "oTxt", um die Arraynamen anzufügen, und füge den Textknoten dann an das Optionselement an, das später an das Auswahlelement angehängt wird.

var array = ['Select Car', 'Volvo', 'Saab', 'Mervedes', 'Audi'];

var sEle = document.createElement('select');
document.getElementsByTagName('body')[0].appendChild(sEle);

for (var i = 0; i < array.length; ++i) {
  var oEle = document.createElement('option');

  if (i == 0) {
    oEle.setAttribute('disabled', 'disabled');
    oEle.setAttribute('selected', 'selected');
  } // end of if loop

  var oTxt = document.createTextNode(array[i]);
  oEle.appendChild(oTxt);

  document.getElementsByTagName('select')[0].appendChild(oEle);
} // end of for loop

1
user3385463

es ist zwar sehr einfach, aber schwierig, aber es ist das, was Sie wollten, ich hoffe, es ist hilfreich: Diese Funktion erzeugt eine Auswahlliste von 1990 bis 2018 nur Wert von x und y ändern;)

function dropDown(){
    var start = 1990;
    var today = 2019;
    document.write("<select>");
    for (var i = start ; i <= today; i++)
    document.write("<option>" + i + "</option>");
}
document.write("</select>");

dropDown();
0
kanaan
const countryResolver = (data = [{}]) => {
    const countrySelecter = document.createElement('select');
    countrySelecter.className = `custom-select`;
    countrySelecter.id = `countrySelect`;
    countrySelecter.setAttribute("aria-label", "Example select with button addon");

    let opt = document.createElement("option");
    opt.text = "Select language";
    opt.disabled = true;
    countrySelecter.add(opt, null);
    let i = 0;
    for (let item of data) {
        let opt = document.createElement("option");
        opt.value = item.Id;
        opt.text = `${i++}. ${item.Id} - ${item.Value}(${item.Comment})`;
        countrySelecter.add(opt, null);
    }
    return countrySelecter;
};
0

const cars = ['Volvo', 'Saab', 'Mervedes', 'Audi'];

let domSelect = document.createElement('select');
domSelect.multiple = true;
document.getElementsByTagName('body')[0].appendChild(domSelect);


for (const i in cars) {
  let optionSelect = document.createElement('option');

  let optText = document.createTextNode(cars[i]);
  optionSelect.appendChild(optText);

  document.getElementsByTagName('select')[0].appendChild(optionSelect);
}

0
Jesus Cuesta