You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JavaScript更简便地实现HTML结构重复渲染?

优化实现方案

方案1:模板字符串拼接(最简便,适合内部可控数据场景)

直接通过ES6模板字符串拼接HTML结构,一次性插入到容器中,代码量大幅缩减,可读性更高:

const dishes = [
    {
        id: "tbb",
        filename: "burger.png",
        dishname: "Triplo bacon burger",
        author: "Jorge Relato"
    },
    {
        id: "p4e",
        filename: "pizza.png",
        dishname: "Pizza 4 estações",
        author: "Fabiana Melo"
    }
]

document.querySelector('.cards').innerHTML = dishes.map(dish => `
    <div class="card" id="${dish.id}">
        <div class="card__image-container">
            <img src="foodassets/${dish.filename}" alt="${dish.id}">
        </div>
        <div class="card__content">
            <p>${dish.dishname}</p>
        </div>
        <div class="card__info">
            <p>por ${dish.author}</p>
        </div>
    </div>
`).join('')

注意:如果dishes数组中的数据来源于用户输入/第三方不可信源,需要先对字段做XSS转义处理,避免注入风险。

方案2:原生<template>标签实现(更安全,适合动态数据场景)

如果需要更高的安全性,也可以用HTML原生的模板标签实现,避免手动拼接字符串的注入风险:
首先在HTML中定义模板:

<template id="cardTemplate">
    <div class="card">
        <div class="card__image-container">
            <img alt="">
        </div>
        <div class="card__content">
            <p></p>
        </div>
        <div class="card__info">
            <p></p>
        </div>
    </div>
</template>

然后JS逻辑:

const dishes = [/* 原有数组内容 */]
const cardsContainer = document.querySelector('.cards')
const template = document.getElementById('cardTemplate')

dishes.forEach(dish => {
    const cardNode = template.content.cloneNode(true)
    const card = cardNode.querySelector('.card')
    card.id = dish.id
    card.querySelector('img').src = `foodassets/${dish.filename}`
    card.querySelector('img').alt = dish.id
    card.querySelector('.card__content p').textContent = dish.dishname
    card.querySelector('.card__info p').textContent = `por ${dish.author}`
    cardsContainer.appendChild(cardNode)
})

两种方案都比逐节点创建拼接的写法更简洁,维护成本更低。

内容的提问来源于stack exchange,提问作者Ferroao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:15:03