首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与jQuery的.Closest相反(Top/Far-Most?)

与jQuery的.Closest相反(Top/Far-Most?)
EN

Stack Overflow用户
提问于 2013-02-09 19:27:13
回答 4查看 19.7K关注 0票数 14

我有一段代码,里面有很多共享相同类名的子菜单。

这是一个结构:

代码语言:javascript
复制
.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'),直到它的长度为零(这个类没有更多的父类,所以它必须是最顶层的)。然而,我认为应该有一种更实际的方法来解决这个问题。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-09 19:29:11

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

代码语言:javascript
复制
$('.elem').click(function() {
    var $topSubMenu = $(this).parents('.sub-menu').last();
});

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

票数 28
EN

Stack Overflow用户

发布于 2013-06-14 02:44:02

这个问题有点误导人,因为.closest()可能会被曲解。实际上,这意味着在树上搜索,直到找到第一个匹配项。因此,相反情况是向下搜索树,直到找到匹配项,且方法为first().

要查找所有子代,可以使用find()find()的对立面是parents()

()(所有级别)对于集合中的每个元素,通过测试元素本身并遍历其在DOM树中的祖先来获取与选择器匹配的第一个元素。

()(所有级别)将匹配元素的集合减少到集合中的第一个

parents() (all Level)获取当前匹配元素集中每个元素的祖先,可选地由选择器过滤。

parent () (仅限下一级)获取当前匹配元素集中每个元素的父级,可选地由选择器过滤。

find() (所有级别)获取由选择器、jQuery对象或元素过滤的当前匹配元素集中每个元素的后代。

票数 30
EN

Stack Overflow用户

发布于 2019-07-20 18:37:42

这是一个基于closest()polyfill的纯JavaScript解决方案。

代码语言:javascript
复制
function furthest(s) {
    var el = this.parentElement || this.parentNode;
    var anc = null;

    while (el !== null && el.nodeType === 1) {
        if (el.matches(s)) anc = el;
        el = el.parentElement || el.parentNode;
    }
    return anc;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14787618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档