Я работаю над решением для упражнения «зацикливание треугольника» в конце Eloquent JavaScript ch2. Книга просит вывести вывод на консоль, но вместо этого я хочу распечатать вывод на веб-страницу в div с id="triangle".
Этот код печатает правильное количество хэшей. Проблема в том, что тег
, созданный в цикле 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, прежде чем добавить его в новую позицию. - person Jonas Wilms   schedule 07.05.2018