Java 脚本 - cloneNode(true),克隆太多项目
Java Script - cloneNode(true), clone too much items
进入正题
我在尝试什么?:
我尝试克隆项目,以便每个项目在单击时都会自我克隆。甚至那些被克隆的。
问题:
问题是,当我克隆了 10 个项目时,单击第一个(原始)项目后,它会克隆接下来的 10 个项目。只有最后一个(最新的)克隆,克隆一个元素,不管我已经有多少元素。
信息:
"clone"函数末尾没有app(),只有原始元素添加更多的克隆。
是 clondeNode() 有问题还是 addEventListener 未对齐?
提前感谢您的帮助,马特
JS:
app = () => {
const divs = document.querySelectorAll('.div');
divs.forEach((div) => {
div.addEventListener('click', () => clone(event))
})
}
clone = (event) => {
const div = event.target;
const clone = div.cloneNode(true);
document.body.appendChild(clone)
app()
}
app()
HTML:
<body>
<div class='div'>DIV FOR CLONING</div>
<script src="main.js"></script>
</body>
在克隆函数中您再次调用了 app()
app = () => {
const divs = document.querySelectorAll('.div');
divs.forEach((div) => {
div.addEventListener('click', () => clone(event))
})
}
clone = (event) => {
const div = event.target;
const clone = div.cloneNode(true);
document.body.appendChild(clone)
app() // <<<<<<-------HERE
}
以递归结束,因为每次单击它都会添加一个新的侦听器。
https://codesandbox.io/s/agitated-cohen-0j6dm
const clone = event => {
const div = event.target;
const cloned = div.cloneNode(true);
document.body.appendChild(cloned);
cloned.addEventListener("click", clone);
};
单击后调用 app()
时,您会向所有现有元素添加一个新的事件侦听器,这是对它们已经附加到它们的处理程序的补充。
不要在那里调用 app
,只需将侦听器添加到新创建的克隆中即可。
其次,您对函数和变量使用相同的名称。这令人困惑。
因此以不同的方式命名该变量:
const clonedDiv = div.cloneNode(true);
document.body.appendChild(clonedDiv);
clonedDiv.addEventListener('click', clone);
如您所见,您也不需要那个箭头函数。只需将 clone
作为函数参数传递即可。
进入正题
我在尝试什么?: 我尝试克隆项目,以便每个项目在单击时都会自我克隆。甚至那些被克隆的。
问题: 问题是,当我克隆了 10 个项目时,单击第一个(原始)项目后,它会克隆接下来的 10 个项目。只有最后一个(最新的)克隆,克隆一个元素,不管我已经有多少元素。
信息: "clone"函数末尾没有app(),只有原始元素添加更多的克隆。
是 clondeNode() 有问题还是 addEventListener 未对齐?
提前感谢您的帮助,马特
JS:
app = () => {
const divs = document.querySelectorAll('.div');
divs.forEach((div) => {
div.addEventListener('click', () => clone(event))
})
}
clone = (event) => {
const div = event.target;
const clone = div.cloneNode(true);
document.body.appendChild(clone)
app()
}
app()
HTML:
<body>
<div class='div'>DIV FOR CLONING</div>
<script src="main.js"></script>
</body>
在克隆函数中您再次调用了 app()
app = () => {
const divs = document.querySelectorAll('.div');
divs.forEach((div) => {
div.addEventListener('click', () => clone(event))
})
}
clone = (event) => {
const div = event.target;
const clone = div.cloneNode(true);
document.body.appendChild(clone)
app() // <<<<<<-------HERE
}
以递归结束,因为每次单击它都会添加一个新的侦听器。
https://codesandbox.io/s/agitated-cohen-0j6dm
const clone = event => {
const div = event.target;
const cloned = div.cloneNode(true);
document.body.appendChild(cloned);
cloned.addEventListener("click", clone);
};
单击后调用 app()
时,您会向所有现有元素添加一个新的事件侦听器,这是对它们已经附加到它们的处理程序的补充。
不要在那里调用 app
,只需将侦听器添加到新创建的克隆中即可。
其次,您对函数和变量使用相同的名称。这令人困惑。
因此以不同的方式命名该变量:
const clonedDiv = div.cloneNode(true);
document.body.appendChild(clonedDiv);
clonedDiv.addEventListener('click', clone);
如您所见,您也不需要那个箭头函数。只需将 clone
作为函数参数传递即可。