几年后我在做一些JavaScript练习而没有使用它,所以如果这是一个愚蠢的问题我会道歉。
我从一个简单的循环开始输出“Hello,world!”几次:
for (i = 0; i < 5; i ++){
var div = document.createElement("div");
div.innerHTML = "Hello, world!";
document.body.appendChild(div);
}
这给了我五行“Hello,world!”。如果我将变量声明移出循环,我想看看代码是否运行得更快:
var div = document.createElement("div");
div.innerHTML = "Hello, world!";
for (i = 0; i < 5; i ++){
document.body.appendChild(div);
}
我期望获得五行“Hello,world!”但我只有一个。有人可以解释原因吗?
谢谢!
答案 0 :(得分:5)
在第一个片段中,您将在每次迭代时创建一个新元素并附加它。
在第二个代码段中,您正在创建一个单个元素,然后基本上将其移动五次。
根据MDN:
Node.appendChild()
方法将节点添加到指定父节点的子节点列表的末尾。如果给定的子项是对文档中现有节点的引用,appendChild()
会将其从当前位置移动到新位置。这意味着节点不能同时文档的两个点。因此,如果节点已经有父节点,则首先删除该节点,然后将其附加到新位置。
因此,您应该在使用.cloneNode()
method:
var div = document.createElement("div");
div.innerHTML = "Hello, world!";
for (i = 0; i < 5; i ++){
document.body.appendChild(div.cloneNode(true));
}