原生 dom 动态渲染商品列表的核心是:获取数据→创建元素→填充内容→插入页面;需用 document.createelement 构建结构、textcontent 防 xss、dataset 存 id,并通过 documentfragment 批量插入提升性能。

用原生 DOM 动态渲染商品列表,核心是:获取数据 → 创建元素 → 填充内容 → 插入到页面。不需要框架,几行关键代码就能搞定。
准备一个容器节点
先在 HTML 中留一个空的容器,比如:
后续所有商品项都会插入到这里。确保 JS 执行前该元素已存在(可把 script 放在 body 底部,或用 DOMContentLoaded)。
用数据生成 DOM 节点
假设有如下商品数组:
const products = [{ id: 1, name: "iPhone 15", price: 5999 },
{ id: 2, name: "AirPods Pro", price: 1899 },
{ id: 3, name: "MacBook Air", price: 9999 }
];
推荐用 document.createElement 逐个创建结构清晰的节点,避免拼接字符串(易出错、难维护):
- 对每个商品,创建 article 或 div 作为单个商品容器
- 内部依次创建 h3(商品名)、p(价格)、button(如“加入购物车”)等子元素
- 用 textContent 填充文本(防 XSS),用 dataset 存 ID 等元信息
批量插入并提升性能
不要每循环一次就调用 appendChild,会触发多次重排。正确做法:
- 创建一个 DocumentFragment 作为临时容器
- 把所有商品节点先加到 fragment 中
- 最后一次性把 fragment 插入目标容器
示例关键代码:
const frag = document.createDocumentFragment();products.forEach(product => {
const item = document.createElement('article');
item.dataset.id = product.id;
const title = document.createElement('h3');
title.textContent = product.name;
const price = document.createElement('p');
price.textContent = `¥${product.price}`;
const btn = document.createElement('button');
btn.textContent = '加入购物车';
btn.addEventListener('click', () => addToCart(product));
item.append(title, price, btn);
frag.appendChild(item);
});
document.getElementById('product-list').appendChild(frag);
后续更新也很简单
如果要刷新列表(比如筛选后),直接清空容器再重新渲染即可:
const container = document.getElementById('product-list');container.innerHTML = '';
// 然后走上面的 frag 渲染流程
如需保留部分状态(如已选中的商品),可改用更精细的 diff 逻辑,但多数场景直接重绘足够快且可靠。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











