我' 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循环的工作。但除此之外,它采用了非常相似的方法。
这让我得出结论:我对递归做错了;我无法看到...... 有什么想法吗?
答案 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)
}