尝试递归地手动编写 getElementsByClassName
代码。
虽然代码在我的控制台中运行,但我没有在 mocha 中传递我的测试用例。假设测试用例编写正确,我可以做些什么来使我的代码更好(阅读:更正确)?
var getElementsByClassName = function(className){
var docBody = document.body;
var classes = [];
var walk = function (node, func) {
func(node);
node = node.firstChild;
while (node) {
walk(node, func);
node = node.sibling;
}
}
walk(docBody, function() {
if (docBody.classList.contains(className)) {
classes.push(docBody)
}
});
return classes;
};
最佳答案
两个问题,如上所述:node.sibling
应该是node.nextSibling
,需要查看传递给的node
walk()
,并不总是在docBody
。
此外,您遇到的某些节点(例如文本节点)不会classList
,因此请考虑到这一点:
var getElementsByClassName = function(className) {
var docBody = document.body;
var classes = [];
var walk = function (node, func) {
func(node);
node = node.firstChild;
while (node) {
walk(node, func);
node = node.nextSibling;
}
}
walk(docBody, function(node) {
if (node.classList && node.classList.contains(className)) {
classes.push(node)
}
});
return classes;
};
关于javascript - 递归地实现 getElementsByClassName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33264842/