javascript - 如何在 javascript 中克隆元素并附加唯一的新子节点

标签 javascript

我制作了克隆函数和文本计数器,它应该在我克隆的每个新框中包含一个新数字,下面的代码克隆了该元素,但新元素始终引用第一个源中的数字以及计数器始终在第一个框中写入新数字,第一个框中始终写入从 1 到最新计数器编号的数字。是否可以仅使用 javascript 来完成?我真的很感谢你的帮助。

var container = document.querySelector(".container");
var deleteBtn = document.querySelector(".delete");
var box = document.querySelector(".box");
var counter = 0;

container.addEventListener('click', function({target}) {
  if (target.nodeName = 'BUTTON' && target.classList.contains('cloneBtn')) {
    counter ++;
    var text = document.createTextNode(counter);
    
    box.appendChild(text);
    const clone = target.parentNode.cloneNode(true);
    container.appendChild(clone);
  }
   
  if(target.nodeName = 'BUTTON' && target.classList.contains('deleteBtn')) {
    target.parentNode.remove(target)
  }
})
.container {
  border: 1px solid black;
  padding: 10px;
  display: flex;
  flex-wrap: wrap;
}
.box {
  width: 100px;
  height: 100px;
  background: red;
  margin: 10px;
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
</head>
<body>
  <div class="container">
    <div class="box">
      <button class="cloneBtn">Clone</button>
      <button class="deleteBtn">Delete</button>
    </div>
  </div>
</body>
</html>

最佳答案

如果我理解正确,问题是您始终将计数器值附加到初始 .box 元素,您希望将其附加到克隆元素,因此您将看到新的克隆元素中的计数器值:

var container = document.querySelector(".container");
var deleteBtn = document.querySelector(".delete");
var box = document.querySelector(".box");
var counter = 0;

container.addEventListener('click', function({target}) {
  if (target.nodeName = 'BUTTON' && target.classList.contains('cloneBtn')) {
    counter++;
    var text = document.createTextNode(counter);
    // box.appendChild(text);  <---- WRONG
    const clone = box.cloneNode(true); // <-- Here clone the initial box instead target to avoid stacking of text nodes
    clone.appendChild(text);
  //^^^^^^^^^^^^^^^^^ here append to the cloned element 
    container.appendChild(clone);
  }
   
  if(target.nodeName = 'BUTTON' && target.classList.contains('deleteBtn')) {
    target.parentNode.remove(target)
  }
})
.container {
  border: 1px solid black;
  padding: 10px;
  display: flex;
  flex-wrap: wrap;
}
.box {
  width: 100px;
  height: 100px;
  background: red;
  margin: 10px;
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
</head>
<body>
  <div class="container">
    <div class="box">
      <button class="cloneBtn">Clone</button>
      <button class="deleteBtn">Delete</button>
    </div>
  </div>
</body>
</html>

关于javascript - 如何在 javascript 中克隆元素并附加唯一的新子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49533325/

相关文章:

c# - 文字换行以适合一定比例(不是大小)的矩形

javascript - 简化 Jquery/Javascript 代码并添加动画

javascript - Angular 2+ - 限制列和行中的文本区域值

javascript - 如何使用 NodeJS 组织构建、服务器、客户端和共享 JavaScript 代码

javascript - 如何从导航栏滚动到 ID

javascript - IE11 style.maxHeight 不是从 css 设置的

javascript - Chart.js折线图设置背景色

javascript - 如何实现 Facebook 的 `Drag Links/Photos Here` ?

php - 在表格行鼠标悬停时显示提交按钮

javascript - 防止在 jquerymobile 中应用一个类