我设法根据矩阵中的一个指定数组(即数组中的数组)生成一系列列表项。
我希望能够将一个变量(表示一个数组)传递给一个函数,这样它就可以根据传入它的数组吐出一个填充了list-items的无序列表。
问题:
解决方案需要:
options[0]
,options[1]
等。)JavaScript的:
var options = [
set0 = ['Option 1','Option 2'],
set1 = ['First Option','Second Option','Third Option']
]
function makeUL(){
var a = '<ul>',
b = '</ul>',
m = [];
// Right now, this loop only works with one
// explicitly specified array (options[0] aka 'set0')
for (i = 0; i < options[0].length; i += 1){
m[i] = '<li>' + options[0][i] + '</li>';
}
document.getElementById('foo').innerHTML = a + m + b;
}
// My goal is to be able to pass a variable
// here to utilize this function with different arrays
makeUL();
答案 0 :(得分:71)
首先,不要通过字符串连接来创建HTML元素。使用DOM操作。它更快,更清洁,更不容易出错。这就解决了你的一个问题。然后,让它接受任何数组作为参数:
var options = [
set0 = ['Option 1','Option 2'],
set1 = ['First Option','Second Option','Third Option']
];
function makeUL(array) {
// Create the list element:
var list = document.createElement('ul');
for (var i = 0; i < array.length; i++) {
// Create the list item:
var item = document.createElement('li');
// Set its contents:
item.appendChild(document.createTextNode(array[i]));
// Add it to the list:
list.appendChild(item);
}
// Finally, return the constructed list:
return list;
}
// Add the contents of options[0] to #foo:
document.getElementById('foo').appendChild(makeUL(options[0]));
Here's a demo. 您可能还需要注意set0
和set1
正在泄漏到全球范围内;如果你想创建一种关联数组,你应该使用一个对象:
var options = {
set0: ['Option 1', 'Option 2'],
set1: ['First Option', 'Second Option', 'Third Option']
};
并按如下方式访问它们:
makeUL(options.set0);
答案 1 :(得分:4)
以下解决方案的缺点是什么?似乎更快或更短。
var options = {
set0: ['Option 1','Option 2'],
set1: ['First Option','Second Option','Third Option']
};
var list = "<li>" + options.set0.join("</li><li>") + "</li>";
document.getElementById("list").innerHTML = list;
答案 2 :(得分:-1)
您还可以考虑以下解决方案:
let sum = options.set0.concat(options.set1);
const codeHTML = '<ol>' + sum.reduce((html, item) => {
return html + "<li>" + item + "</li>";
}, "") + '</ol>';
document.querySelector("#list").innerHTML = codeHTML;