从头开始编写getElementBy

从头开始编写getElementBy

我正在尝试从头开始编写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树!

当然,每个孩子都有一个自己的孩子阵列。否则,它不会是一棵树。

当您要返回所有匹配元素的数组时,必须将结果与递归调用并置。

这可以工作:



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 - 从头开始编写getElementByName,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58973674/

10-10 05:26