getElementsByClassName从无到有

时间:2019-04-06 01:23:59

标签: javascript recursion

我的代码无法正常工作,我也不知道为什么。

var getElementsByClassName = function(className){
  let result = [];
  let child = document.body.childNodes;
  function nodeRecusion(node) {
    for (let i = 0; i < node.length; i++) {
      let current = node[i];
      if (current.classList.contains(className)) {
      result.push(node[i]);
      }
      if (current.childNodes.length) {
      nodeRecusion(current);
      }
    }
  }
  nodeRecusion(child);
  return result;
};

我得到的错误是“无法读取.contains的属性undefined”。不过我不明白这个问题,是因为它收不到孩子,还是我试图递归地调用它的问题?

2 个答案:

答案 0 :(得分:2)

classList属性可用于Element类,而不能用于Node接口。

您可以改用document.body.children

var getElementsByClassName = function(className) {
  let result = [];
  let child = document.body.children;

  function nodeRecusion(node) {
    for (let i = 0; i < node.length; i++) {
      let current = node[i];
      if (current.classList.contains(className)) {
        result.push(node[i]);
      }
      if (current.children.length) {
        nodeRecusion(current);
      }
    }
  }
  
  nodeRecusion(child);
  return result;
};

console.log(getElementsByClassName('ele'));
<p class='ele'></p>
<span class='ele'></span>
<span class='stack'></span>

答案 1 :(得分:0)

尝试在第三行中替换它

let child = document.body.children;