如何使用模板文字生成 HTML,数据来自 JavaScript 中的 object 文字?
How to generate HTML using template literal with data coming from an object literal in JavaScript?
正如标题所说,我正在尝试使用 object 文字数据动态生成我的 HTML 按钮,并使用它们来填充模板文字。
一直在尝试但没有成功,找不到关于这个的答案..
请检查以下代码:
const dockButtons = {
'list': [
{
'title': 'Search',
'icon': '<i class="bi bi-search"></i>',
'classes': 'dock-btn dock-btn-light',
'id': 'search-links-app-icon',
'attributes': 'type="button" accesskey="s"',
'onclick': '',
'access': '',
},
{
'title': 'Notes & PDU Assist',
'icon': '<img class="dock-imgs" src="../assets/links-favicons/assist.svg">',
'classes': 'collapse dock-btn dock-btn-blue ms-2',
'id': 'notes-and-pdu-assist-app-icon',
'attributes': 'type="button"',
'onclick': 'closeMainCardsList();',
'access': '',
},
]
};
const dockButtonsTemplate = `<button class="${classes} ${access}" id="${id}" onclick="${onclick}" ${attributes} title="${title}">${icon}</button>`;
const generateDockButtons = dockButtons.list.map(dockButtonsTemplate);
document.getElementById("dock-buttons-data").innerHTML = generateDockButtons.join("")
<div id="dock-buttons-data"></div>
我还希望可以在模板中创建条件,例如,如果 onclick
object 值为空,则不要在模板文字中创建它。
如果我包含这些行,它就可以工作(条件除外):
const dockButtonsTemplate = ({
title,
icon,
classes,
id,
attributes,
onclick,
access
}) =>
这是我最近学会使用的东西,所以我不知道如何从我获得的教程中删除上面的第二个片段。如果可能的话,我希望它直接获取那些 object。
还有另一个问题,加载速度更快,如果我已经说过,从模板生成 3000 多个按钮或不使用此模板的 3000 多个硬编码 HTML 按钮?
你可以试试这个代码
const btnList = dockButtons .lists;
document.getElementById('dock-buttons-data').innerHTML = `${btnList.map((btn) =>
<button class="${btn.classes} ${btn.access}" id="${btn.id}"
onclick="${btn.onclick}" ${btn.attributes}
title="${btn.title}">${btn.icon}</button>)}`
OR 3000+ 硬编码 HTML 按钮比从模板生成的 3000+ 按钮更快
正如标题所说,我正在尝试使用 object 文字数据动态生成我的 HTML 按钮,并使用它们来填充模板文字。
一直在尝试但没有成功,找不到关于这个的答案..
请检查以下代码:
const dockButtons = {
'list': [
{
'title': 'Search',
'icon': '<i class="bi bi-search"></i>',
'classes': 'dock-btn dock-btn-light',
'id': 'search-links-app-icon',
'attributes': 'type="button" accesskey="s"',
'onclick': '',
'access': '',
},
{
'title': 'Notes & PDU Assist',
'icon': '<img class="dock-imgs" src="../assets/links-favicons/assist.svg">',
'classes': 'collapse dock-btn dock-btn-blue ms-2',
'id': 'notes-and-pdu-assist-app-icon',
'attributes': 'type="button"',
'onclick': 'closeMainCardsList();',
'access': '',
},
]
};
const dockButtonsTemplate = `<button class="${classes} ${access}" id="${id}" onclick="${onclick}" ${attributes} title="${title}">${icon}</button>`;
const generateDockButtons = dockButtons.list.map(dockButtonsTemplate);
document.getElementById("dock-buttons-data").innerHTML = generateDockButtons.join("")
<div id="dock-buttons-data"></div>
我还希望可以在模板中创建条件,例如,如果 onclick
object 值为空,则不要在模板文字中创建它。
如果我包含这些行,它就可以工作(条件除外):
const dockButtonsTemplate = ({
title,
icon,
classes,
id,
attributes,
onclick,
access
}) =>
这是我最近学会使用的东西,所以我不知道如何从我获得的教程中删除上面的第二个片段。如果可能的话,我希望它直接获取那些 object。
还有另一个问题,加载速度更快,如果我已经说过,从模板生成 3000 多个按钮或不使用此模板的 3000 多个硬编码 HTML 按钮?
你可以试试这个代码
const btnList = dockButtons .lists;
document.getElementById('dock-buttons-data').innerHTML = `${btnList.map((btn) =>
<button class="${btn.classes} ${btn.access}" id="${btn.id}"
onclick="${btn.onclick}" ${btn.attributes}
title="${btn.title}">${btn.icon}</button>)}`
OR 3000+ 硬编码 HTML 按钮比从模板生成的 3000+ 按钮更快