javascript - 使用递归实现 getElementsByClassName

标签 javascript dom recursion

我在 getElementsByClassName 中创建了一个函数,用于测试当前节点以检查它是否与 className 匹配,然后递归地测试当前节点的子节点。

对我来说,这在逻辑上是有意义的,但我不确定为什么结果不会产生与 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;
};

最佳答案

在检查 className 时,您正在做一些小事情。

if (node.classList && node.classList.contains(className)) {
    nodeList.push(node);
}

http://jsfiddle.net/us5xjv66/8/

关于javascript - 使用递归实现 getElementsByClassName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29013969/

相关文章:

java - 如何在 Java 中有效地读取包含大量小项目的大型 XML 文件?

javascript - 页面数据中地址的 URL?

recursion - GNU Prolog - 递归问题(简单?)

algorithm - Mergesort - 递归调用的最大数量

javascript - 使用javascript显示多个选中复选框的标签

javascript - 从 js 文件调用 laravel 路由

javascript - 如何缩小正则表达式验证失败的原因?

javascript - JS将子元素随机分布在其父元素中,不重叠

javascript - 总结给定级别的树(嵌套对象)

javascript - Flexslider 适用于除 IE 10 以外的所有应用