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

如何使用append()重复添加相同节点?寻求更优实现方案

问题与优化方案

需求:将类名为row的节点作为卡片,添加到container容器中两次。

原始HTML结构

<div class="container">
      <div class="row">
          <div class="col-sm-4">
            <img src="https://via.placeholder.com/600" class="w-100">
            <h5 class="title">Card title</h5>
            <p class="price">price : 70000</p>
          </div>
      </div>
    </div>

方案1:失败的实现

// way1 未能添加两次
let card = document.querySelector('.row').cloneNode(true) //想要添加到container中两次
let container = document.querySelector('.container');

container.append(card)
container.append(card)   

失败原因:DOM节点是唯一的实体,第一次append后,card已经挂载到container中;第二次append只是将这个已存在的节点从当前位置移动到容器末尾,并不会创建新节点,因此最终只会出现一个克隆的卡片。

方案2:可行但不够优雅的实现

// way2 可解决但代码不够优雅
 
let card = document.querySelector('.row').cloneNode(true);
let card2 = document.querySelector('.row').cloneNode(true);
let container = document.querySelector('.container');

container.append(card, card2)

该方案通过两次克隆生成独立节点实现需求,但重复的克隆代码冗余,扩展性差(如需添加更多卡片,要重复写克隆语句)。

更优实现方式

方式1:循环批量创建克隆节点

通过循环控制克隆次数,代码简洁且扩展性强:

const originalCard = document.querySelector('.row');
const container = document.querySelector('.container');

// 按需修改循环次数即可添加对应数量的卡片
for (let i = 0; i < 2; i++) {
  const cardClone = originalCard.cloneNode(true);
  container.append(cardClone);
}

方式2:利用数组批量生成克隆节点并一次性添加

借助数组生成克隆节点集合,通过展开运算符一次性添加到容器:

const originalCard = document.querySelector('.row');
const container = document.querySelector('.container');

// 创建包含指定数量克隆节点的数组
const cardClones = Array.from({ length: 2 }, () => originalCard.cloneNode(true));
// 展开数组批量添加
container.append(...cardClones);

这两种方式都避免了重复代码,只需修改数字即可调整添加的卡片数量,代码更简洁优雅,可维护性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:05:20