我目前正在学习递归,并尝试通过递归遍历DOM来重新实现getElementsByClassName
函数。我终于感觉理解了这些概念,但是当我将匹配元素推入结果数组时却出现了问题。以下是我的代码:
var getElementsByClassName = function(className){
var results = [];
var domWalker = function(node) {
for (var i=0; i<node.children.length; i++) {
if (node.children[i].classList.contains(className)) {
console.log(node.children[i])
results.push(node.children[i])
}
if (node.children[i].children.length > 0) {
domWalker(node.children[i])
}
}
return results;
};
domWalker(document.body);
console.log(results)
};
基本上,我需要结果数组以HTML格式保留它在HTML中找到的匹配元素,如下所示:[<div class="title"></div>, <button class="click"></button>],但是当我将这些元素推入我的结果数组时,它们会变成 div.title,button.click 格式。我在调用results.push之前添加了console.log语句来查看结果是否以正确格式出现,结果都是正确的。推送到数组中的结果就是我要找的结果,只不过显示为错误的格式。为什么push会导致结果格式改变,我该如何解决这个问题?
node.children[i].outerHTML
推入您的数组中,而不是元素对象。 - dandavis