【发布时间】:2018-05-07 19:33:38
【问题描述】:
我正在为 Eloquent JavaScript ch2 末尾的“循环三角形”练习制定解决方案。这本书要求将输出记录到控制台,但我想将输出打印到网页,在 id="triangle" 的 div 中。
此代码正在打印正确数量的哈希。问题在于,当循环在最终表达式中递增时,在 for 循环中创建的
标记被神秘地删除了。也就是说:如果我单步执行代码 hashPrint.appendChild(carriage) 在断点处执行得很好,但是一旦调试器进入 i++,
子元素就会从网页中删除。
var hash = "";
var hashPrint = document.getElementById("triangle");
var carriage = document.createElement("br");
for (var i = 0; i < 7; i++) {
hash += "#";
var content = document.createTextNode(hash);
hashPrint.appendChild(content);
hashPrint.appendChild(carriage);
}
如果我将 var 回车声明放在 for 循环中,它可以正常工作。我知道 JS 最佳实践鼓励避免全局范围,我最近一直在做很多 Java 编程,在我看来,如果我想在另一个循环中使用它,那么在全局中使用 createElement("br") 可能会很方便在页面上。
尽管我已经有了解决该问题的方法,但我想知道为什么 for 循环中的最终表达式会触发子节点的删除。基本上,为什么这不起作用?我到处寻找解释,但没有运气。
【问题讨论】:
-
appendChild在将元素添加到新位置之前将其从 DOM 中移除。
标签: javascript loops increment createelement