我尝试使用DOM
搜索特定班级的classList.contains
元素,但收到此错误:
" TypeError:无法读取属性'包含'未定义的。"
尝试使用.indexOf
进行搜索时,我遇到了同样的错误。令我困惑的部分是,当我console.log
this.classList时,它正确记录了classList对象。我在使用包含哪里出错了?注意:这是使用递归进行练习的getElementsByClassName
的重新实现。
var allNodes = document.body;
function comb(parent, callback) {
if (parent.hasChildNodes()) {
for (var node = parent.firstChild; node; node = node.nextSibling) {
comb(node, callback);
}
}
callback.call(parent);
}
function check() {
var passed = this.classList.contains("right");
if (passed) {
return this.nodeValue;
}
}
comb(allNodes, check);
答案 0 :(得分:1)
firstChild
和nextSibling
将包含文字节点,其中没有classList
你想坚持元素,所以在for循环中说:
for (var node = parent.firstChild; node; node = node.nextSibling) {
if (node.nodeType == 1)
comb(node, callback);
}
}
或者,正如奥马尔在评论中指出的那样:
for (var node = parent.firstElementChild; node; node = node.nextElementSibling) {
comb(node, callback);
}