我在getElementsByClassName中创建了一个函数,用于测试当前节点以检查它是否与className匹配,然后递归测试当前节点的childNodes。
对我而言,这在逻辑上是有道理的,但我不确定为什么结果不会产生与getElementsByClassName相同的结果。我尝试实现一个for循环来检查当前级别中的每个节点,但这似乎也不起作用。我需要在第一个if语句中调整什么才能使此代码正常工作?
function getElementsByClassName (className) {
var nodeList = [];
function test(node) {
if (node.classList === className) {
nodeList.push(node.classList[count]);
}
for (var index = 0; index < node.childNodes.length; index++) {
test(node.childNodes[index]);
}
}
test(document.body)
return nodeList;
};
答案 0 :(得分:2)
检查className时你做的很小。
if (node.classList && node.classList.contains(className)) {
nodeList.push(node);
}
答案 1 :(得分:1)
使用underscore.js的工作解决方案:
function getElementsByClassName(className) {
var nodeList = [];
function test(node) {
if (_(node.classList).contains(className)) {
nodeList.push(node);
}
_(node.childNodes).forEach(function(child) {
test(child);
});
}
test(document.body);
return nodeList;
}
答案 2 :(得分:0)
我认为这是你想要实现的目标:
if (node.className === className) { // if classname matches, add node to list
nodeList.push(node);
}
或者更好的是,处理多个类名:
if(node.classList){
if (node.classList.contains(className)) {
nodeList.push(node);
}
}