无法搜索classList .with contains

时间:2015-04-15 21:17:11

标签: javascript

我尝试使用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);

1 个答案:

答案 0 :(得分:1)

firstChildnextSibling将包含文字节点,其中没有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);
}