我目前正在學習遞歸,並試圖通過使用遞歸遍歷DOM來重新實現getElementsByClassName
函數。我終於覺得自己已經掌握了這些概念,但當我將匹配元素推送到結果數組時,我遇到了問題。我的繼承人代碼:使用遞歸重新實現getElementsByClassName - Javascript
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格式像這樣:
[<div class="title"></div>, <button class="click"></button>]
...然而,當我把這些元素融入我的結果數組更改爲:[div.title, button.click]
格式。
我在調用results.push
的上方添加了0語句,以查看在將結果推送到它們所在的數組之前結果是否以正確的格式顯示。被推送到數組的結果是我正在查找的結果,它們只是以錯誤的格式顯示。
爲什麼push會導致我的結果格式發生變化,我該如何解決這個問題?
沒有格式更改,只有控制檯格式化數組,使更多的元素可視化地適合屏幕。數組項目本身就是你認爲他們是。如果你想要html源代碼,你可以得到最接近的是將'node.children [i] .outerHTML'推入你的數組而不是元素對象。 – dandavis