javascript - 从头开始编写 getElementsByName

标签 javascript recursion

我正在尝试从头开始编写 getElementByClassName,但我不确定何时返回递归。这就是我想到的:

  const getElementsByClassName = (nameOfClass, parent) => {

  const result = []
  for(let el of parent) {
       // console.log(el.children)
     if(el.firstElementChild != null) {
       // do it again on node deeper
        getElementsByClassName(nameOfClass, el.children)
     }

     if(el.className === nameOfClass) {
        result.push(el)
     }
   }
   // when do I want to return result?
   console.log(result)
   return result

};

问题是我每个子节点都有一个数组,而不是同一数组结果中的所有内容。我该如何解决这个问题?

最佳答案

所以你试图通过递归函数遍历 DOM 树!?

当然,每个 child 都有自己的 child 数组。否则它就不是一棵树了。

当您想要返回所有匹配元素的数组时,您必须将结果与递归调用连接起来。

这可行:

const getElementsByClassName = (nameOfClass, parent) => {

  const result = []
  if (parent.className === nameOfClass) {
    result.push(parent);
  }
  for(let el of parent.children) {
    result = result.concat(getElementByClassName(nameOfClass, el));
   }

   return result
};

此实现只能用于教育目的,因为它具有很大的存储复杂性。

关于javascript - 从头开始编写 getElementsByName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58973674/

相关文章:

c - 如何正确求和数组元素

data-structures - 通过 Clojure 中的集合进行递归的惯用方式

python - 在递归函数中保持计数? [Jython]

javascript - elim 单击了 <label> <div> <checkbox>

javascript - vue 点击按列清空排序

javascript - 过滤对象数组中的项目

c - 如何使用递归[C]对数字进行求和?

javascript - 深度搜索JSON对象

javascript - react 表: How do I total (sum) values to each of the holeOne thru holeNine and display the sum as a value in out: 41?

javascript - Chai assert.deepEqual 在使用 atob 时抛出错误 "TypeError: Right-hand side of ' instanceof' is not an object"