javascript - 递归地实现 getElementsByClassName

标签 javascript dom recursion

尝试递归地手动编写 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/

相关文章:

javascript - jQuery 获取类名列表并添加到隐藏表单

onload 事件中的 JavaScript 图像

php - 使用php从数据库中检索值后如何使用其id获取div的值

algorithm - 递归与迭代

Java:使用 Apache commons-IO 2.4 在子目录中递归列出文件

javascript - 奇怪的异步代码行为

javascript - 当前模块化 Javascript 应用程序的最佳实践

javascript - Jquery文件包含问题

javascript - 当在没有目标元素的情况下调用 addEventListener 时,它默认为什么元素?

javascript - 如何使用 Lodash/JS 递归过滤嵌套对象?