真的需要你的帮助。我正在尝试编写一个从 javascript 对象生成 HTML 标记的函数。
我的想法是我发送一个对象和一个根元素作为参数并递归地附加元素。
这是代码。
const struct = [
{
tag: 'div',
classes: ['container'],
innerHtml: [
{
tag: 'input',
classes: ['input'],
attributes: [
['type', 'text'],
['placeholder', 'Some input']
]
},
{
tag: 'div',
classes: ['btn-block'],
innerHtml: [
{
tag: 'div',
classes: ['btn', 'btn-long'],
innerText: 'Long Button'
},
{
tag: 'div',
classes: ['btn', 'btn-big', 'btn-img'],
innerHtml: [
{
tag: 'img',
attributes: [
['src', 'https://www.w3schools.com/images/w3certified_logo_250.png']
],
}
],
}
]
},
{
tag: 'div',
classes: ['red']
}
]
}
];
const root = document.body;
function create(obj, root) {
obj.forEach(o => {
const element = document.createElement(o.tag);
if (o.classes) {
const classes = o.classes;
element.classList.add(...classes);
}
if (o.attributes) {
o.attributes.forEach(a => {
element.setAttribute(a[0], a[1]);
})
}
if (o.hasOwnProperty('innerHtml')) {
element.append(create(o.innerHtml, element));
}
if (o.innerText) {
element.innerText = o.innerText
}
root.append(element);
});
}
create(struct, root);
并且有一个结果;
如您所见,该函数将文本“未定义”添加到每个元素。
你能帮我修一下吗?
UPD:由@CertainPerformance 和@Nina Scholz 的回答解决
catspeake
青春有我
相关分类