nearestParent方法总是返回' undefined'

时间:2017-04-28 10:03:48

标签: javascript recursion ecmascript-6 closest

我' m havin'编写函数(或更具体的ES6类方法)的艰难时刻,它返回与指定选择器匹配的最接近父元素的元素。

我的函数以递归方式再次调用自身,直到在当前元素classList属性中找到所需的类。

如果我记录元素,我会得到我想要的确切元素,但如果我记录函数调用本身,它总是返回undefined

这是我的代码:

findParent (element, selector) {
    if (element === document) return null // stops when at end of tree
    if (element.classList.contains('foo-selector')) {
      console.log(element)  // logs the expected element
      return element // returns 'undefined'
    }
    this.findParent(element.parentNode) // function calls itself again
}

我进行了一些实验,看了一下getClosest函数的不同实现,发现了一个使用 for循环的工作。但除此之外,它采用了非常相似的方法。

这让我得出结论:我对递归做错了;我无法看到...... 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

当你再次打电话时,你不会回来。改变它:

findParent (element, selector) {
    if (element === document) return null // stops when at end of tree
    if (element.classList.contains('foo-selector')) {
      console.log(element)  // logs the expected element
      return element // returns 'undefined'
    }
    return this.findParent(element.parentNode) // function calls itself again
}

答案 1 :(得分:1)

您需要从再次调用递归函数的位置返回

findParent (element, selector) {
    if (element === document) return null // stops when at end of tree
    if (element.classList.contains('foo-selector')) {
      console.log(element)  // logs the expected element
      return element 
    }
    return this.findParent(element.parentNode) 
}