我的代码无法正常工作,我也不知道为什么。
var getElementsByClassName = function(className){
let result = [];
let child = document.body.childNodes;
function nodeRecusion(node) {
for (let i = 0; i < node.length; i++) {
let current = node[i];
if (current.classList.contains(className)) {
result.push(node[i]);
}
if (current.childNodes.length) {
nodeRecusion(current);
}
}
}
nodeRecusion(child);
return result;
};
我得到的错误是“无法读取.contains
的属性undefined
”。不过我不明白这个问题,是因为它收不到孩子,还是我试图递归地调用它的问题?
答案 0 :(得分:2)
classList
属性可用于Element
类,而不能用于Node
接口。
您可以改用document.body.children
。
var getElementsByClassName = function(className) {
let result = [];
let child = document.body.children;
function nodeRecusion(node) {
for (let i = 0; i < node.length; i++) {
let current = node[i];
if (current.classList.contains(className)) {
result.push(node[i]);
}
if (current.children.length) {
nodeRecusion(current);
}
}
}
nodeRecusion(child);
return result;
};
console.log(getElementsByClassName('ele'));
<p class='ele'></p>
<span class='ele'></span>
<span class='stack'></span>
答案 1 :(得分:0)
尝试在第三行中替换它
let child = document.body.children;