javascript - 附加后无法克隆片段?
问题描述
以下代码片段是从“Javascript Ninja 的秘密”的清单 12.4 中简化的,以将新元素注入多个现有元素。
<!DOCTYPE html>
<html>
<body>
<div id="test1">Test 1</div>
<div id="test2">Test 2</div>
<div id="test3">Test 3</div>
<script>
const divs = document.querySelectorAll("div");
const fragment = document.createDocumentFragment();
const div = document.createElement("div");
div.innerHTML = "<b>Element Injected</b>";
fragment.appendChild(div.firstChild);
for (let i = 0; divs[i]; i++) {
divs[i].appendChild(i > 0 ? fragment.cloneNode(true) : fragment);
}
</script>
</body>
</html>
似乎该行:
divs[i].appendChild(i > 0 ? fragment.cloneNode(true) : fragment);
无法正常工作,因为只注入了“test1”元素。所以我把它改成:
divs[i].appendChild(fragment.cloneNode(true));
这会向所有元素(test1、test2 和 test3)注入新元素。如何按照作者的意图将片段用于第一个元素(test1)和片段.cloneNode(true)用于其余元素(test2,test3)?
解决方案
当您将片段附加到某处时,其所有内容都会传递到该位置并且片段变为空。如果你想多次添加它的内容,你必须每次都克隆它。
这是一个显示行为的示例:
const divs = document.querySelectorAll("div");
const fragment = document.createDocumentFragment();
const div = document.createElement("div");
div.innerHTML = "<b>Element Injected</b>";
fragment.appendChild(div.firstChild);
console.log(`fragment before appending has ${fragment.childNodes.length} children`);
divs[0].appendChild(fragment);
console.log(`fragment after appending has ${fragment.childNodes.length} children`);
<div id="test1">Test 1</div>
<div id="test2">Test 2</div>
<div id="test3">Test 3</div>
推荐阅读
- tkinter - Tkinter 将标签更改为默认字体
- c# - 在 Blazor 中将文本转换为始终为大写
- javascript - 如何将从打字稿转译的节点模块导入 Nuxt?
- verilog - 当我执行合成时收到警告第 49 行:9 位表达式的结果被截断以适合 8 位目标?
- c - C libcurl 程序在 Eclipse 上立即终止
- c++ - C++ 赋值运算符在类的易失性和非易失性实例之间进行复制
- jq - 根据对子元素数组的搜索选择元素,为数组中的每个匹配项返回一次元素
- angular - 角度测试床模拟服务
- python - Python tkinter 下拉菜单
- python-3.x - 如何在某个日期范围内获取熊猫数据框中的数据