当我运行这个脚本时,页面不断加载并最终冻结。这是因为每次我创建一个元素时,主要DOMContentLoaded
侦听器正在被调用?document.createElement是否继续触发DOMContentLoaded事件侦听器?
如果是这样,我该如何阻止这种递归行为,并且只向每个预先存在的节点添加一个节点?
//Waits for page to load
document.addEventListener('DOMContentLoaded', function() {
//Get all elements
var items = document.getElementsByTagName("*");
//Loop through entire DOM
for (var i = 0; i < items.length; i++) {
//If it is not a text node
if (!(items[i].nodeType == 3)){
//Create a div
var newDiv = document.createElement("div");
//Add div to current object
items[i].appendChild(newDiv);
}
}
});
哇真棒,完美的作品! 第2行如何工作?它是如何摆脱“活”的问题的? –
@EricNelson:很高兴帮助。 Array.from()只是一个将任何类似数组的对象转换为实际数组的实用程序,它不具有“活”特性。 '[... collection]'语法类似。它只是数组字面值语法,但使用'...'spread语法将集合复制到正在创建的数组中。 – 2017-02-19 00:47:17