jquery - 与 jQuery 的 .Closest 相反(顶部/最远?)

标签 jquery dom parent closest

我有一个包含许多共享相同类名的子菜单的代码。

这是一个结构:

.menu
  .sub-menu
  .sub-menu
    .sub-menu
    .sub-menu
  .sub-menu
    .sub-menu
      .elem
      .elem
  .sub-menu

请注意,.sub-menu 的深度可能是无限的。

那么我该如何实现这一点:当单击 .elem 时,我想向上遍历 DOM,直到到达最顶层的 .sub-menu 并应用一种风格。我知道 .closest().parent().find(),但我不知道 jQuery 是否有这样的功能例如.topMost(selector)

我能想到的唯一方法可能是运行一个循环并遍历新元素的 .closest('.sub-menu') 直到其长度为零(不再有父元素有了这个类,所以它必须是最顶层的)。但是,我认为应该有一种更实用的方法。

最佳答案

假设通过“最近的相反”您想要“最远的”元素,您可以使用parents().last(),如下所示:

$('.elem').on('click', e => {
  var $topSubMenu = $(e.target).parents('.sub-menu').last();
});

注意,当 jQuery 遍历 DOM 时,您希望数组中的最后一个元素,因此顶级项将是集合中的最后一个元素。

如果您的意思是您想要“最接近的”元素,那么您可以使用find('.submenu').first(),如下所示:

$('.elem').on('click', e => {
  var $topSubMenu = $(e.target).find('.submenu').first();
});

您可以在此处使用 children('.submenu') 而不是 find() - 这取决于您需要遍历 DOM 树的下层数。

关于jquery - 与 jQuery 的 .Closest 相反(顶部/最远?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14787618/

相关文章:

javascript - 如何根据选择隐藏和显示 HTML 中的字段

html - CSSOM 和 DOM 创建是异步的吗?

vbscript - 将文件移动到相对父目录

css - 如何自动在父项内垂直堆叠 div?

javascript - lof JSliderNews 不起作用

javascript - 序列化元素内的输入(不是表单)

php - 按下回车键时如何防止表单内的输入字段提交?

javascript - 使用 Javascript 在选择框中设置样式选项

javascript - 是否可以使用 TypeScript 将 HTML 中的 div 设为 "Pre-render"?

python - 使用父指针在二叉搜索树中删除