【发布时间】:2021-12-27 07:19:46
【问题描述】:
我正在尝试创建一个函数,该函数接受一个带有几个参数的对象并返回一个新创建的 div。
据我所知,似乎有两种主要方法可以做到这一点:
- 自行创建每个元素并附加它
- 创建模板字面量并设置 div 的 innerHTML
函数的输入不是用户生成的,所以我不认为使用模板文字会产生安全问题(如果我错了请指教)
所以现在我的问题如下:
- 一个比另一个更有效?
- 是首选吗?
- 还有其他问题吗?
- 有没有更有效/更好的方法?
您可以在下面看到我提出的两种解决方案。
function createDiv (entry) {
const div = document.createElement('div')
div.classList.add('exchange')
div.id = entry.exchange
const img = document.createElement('img')
img.src = `/static/img/${entry.img}.png`
img.alt = entry.name
img.classList.add('logo-image')
div.appendChild(img)
const link = document.createElement('a')
link.href = entry.url
link.classList.add('name')
link.innerText = entry.name
div.appendChild(link)
const routing = document.createElement('span')
routing.innerText = entry.routing ? entry.routing : ''
div.appendChild(routing)
const price = document.createElement('span')
price.innerText = entry.price
price.classList.add('price')
div.appendChild(price)
return div
}
function createDiv (entry) {
const div = document.createElement('div')
div.classList.add('exchange')
div.id = entry.exchange
let text = `
<img class="logo-image" src="/static/img/${entry.img}.png" alt="${entry.name}">
<a class="exchange-name" href="${entry.url}">${entry.name}</a>
<span>${routing.innerText = entry.routing ? entry.routing : ''}</span>
<span class="price">${entry.price}</span>
`
div.innerHTML = text
return div
}
提前谢谢你!
【问题讨论】:
-
您使用
createElement的第一个示例虽然更详细,但如果输入数据来自用户,则更适合尤其是。 -
最大的担忧显然是
XSS。无论谁生成内容,我都强烈建议进行消毒。不是今天,不是明天,但有一天新开发人员会查看代码并说hey, why not pass a script to show that alert product team wants,然后一切都转到 sh1t。 -
抱歉,这里有一个错字:它不是用户生成的。
-
另一种方法是使用template,然后替换必要的值。
标签: javascript html createelement template-literals