javascript - jQuery递归搜索类的父元素

标签 javascript jquery

我对 JavaScript/jQuery 在一个简单函数中看似奇怪的行为感到困惑,我编写了这个函数来通过类名查找父元素。该函数看起来非常简单,因为它检查元素上的类,如果没有找到它,它将调用父元素的相同函数...直到找到该类。

这里是相关的 JSFiddle,https://jsfiddle.net/xxvywa4v/ .

<小时/>

给定以下 HTML:

<div class="outer">
  <div class="inner">
    <div class="innermost">Click Me</div>
  </div>
</div>

以及以下 JavaScript:

function getParentByClass($el, className) { 
  if ($el.hasClass(className)) {
    console.log('found element!', $el); // returns correct element
    return $el;
  } else {
    getParentByClass($el.parent(), className);
  }
}

$('.innermost').on('click', function(e) {
  var $outerEl = getParentByClass($(e.target), 'outer');

  console.info($outerEl); // undefined
});

为什么在 getElementByClass 中正确记录并找到该元素,但却以 undefined 的形式返回到点击处理程序?

(注意:我对重现此功能的替代方法不感兴趣,而是对它在这个特定实现中不起作用的原因感兴趣)

最佳答案

小错误,您实际上并没有返回在递归中找到的内容。当你找到它时,你会返回它,但你不会将其冒泡来返回:

} else {
    getParentByClass($el.parent(), className);
}

您还需要在此处放置一个返回:return getParentByClass($el.parent(), className);

关于javascript - jQuery递归搜索类的父元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37145076/

相关文章:

javascript - 在 expo Document-picker 上使用 URI 来获取文件本身

c# - 服务器无法识别 HTTP header SOAPAction 的值

javascript - 在内部 Javascript 回调函数中访问父函数参数的正确方法

javascript - 如何使 jQuery 可排序放在空列上?

php - 重新渲染添加元素主干的点击事件

javascript - 聚焦 DIV 上的单击操作

javascript - Mongodb-用户验证失败

php - 两个数组的 Google 散点图

javascript - 使用 jQuery 回滚 SELECT 更改

javascript - 所有选定复选框的 jQuery 数组(按类)