Как программно добавить выпадающий список (<select>)?
Я хочу создать функцию, чтобы программно добавить некоторые элементы на страницу.
Допустим, я хочу добавить выпадающий список с четырьмя опциями:
<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>
Как я могу это сделать?
Ответы
Ответ 1
Это будет работать (чистый JS, добавляемый к div 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);
}
Демо: http://jsfiddle.net/4pwvg/
Ответ 2
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);
};
Ответ 3
Я быстро создал функцию, которая может это сделать, это может быть не лучший способ сделать это, но она просто работает и должна быть кросс-браузером, пожалуйста, также знайте, что я НЕ эксперт по 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;
}
позволяет увидеть, как мы это делаем
<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>
здесь, как это работает
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 #
);
это параметры
createElement('tagName', 'Text to Insert', {any: 'attribute', here: 'like', id: 'mainContainer'}, [elements, to, append, to, this, element], 'body || container = where to append this element');
Эта функция подходит, если вам нужно добавить много элементов, если есть способ улучшить этот ответ, пожалуйста, дайте мне знать.
изменить:
Вот рабочая демонстрация
Это может быть настроено в соответствии с вашим проектом!
Ответ 4
Этот код будет создавать список выбора динамически. Сначала я создаю массив с именами автомобилей. Во-вторых, я создаю элемент select динамически и назначаю его переменной "sEle" и добавляю его в тело html-документа. Затем я использую цикл for для цикла через массив. В-третьих, я динамически создаю элемент option и назначаю его переменной "oEle". Используя оператор if, я назначаю атрибуты "disabled" и "selected" для первого элемента option [0], чтобы он всегда выбирался и был отключен. Затем я создаю текстовый массив node "oTxt", чтобы добавить имена массива, а затем добавить текст node к элементу параметра, который позднее добавляется к элементу select.
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
Ответ 5
Вот версия ответа ES6, предоставленная 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);
Ответ 6
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);
}
Ответ 7
это очень просто, но сложно, но вот что вы хотели, надеюсь, это поможет: эта функция генерирует список выбора с 1990 по 2018 год. Я думаю, что этот пример может помочь вам, если вы хотите добавить любое другое значение, просто измените значения x и y; )
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();
Ответ 8
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;
};