相反jQuery的.Closest(顶部/远大多数?)(Opposite to jQuery'

2019-07-19 15:41发布

我有很多子菜单的共享相同的类名称的代码。

这里有一个结构:

.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')的新元素,直到它的长度是零(没有更多的父母带着这个类,所以它必须顶-最)。 不过,我觉得应该有这种更实用的方式。

Answer 1:

通过“最接近的对面”假设你想要的“最远的”父元素,你可以使用parents().last()就像这样:

$('.elem').click(function() {
    var $topSubMenu = $(this).parents('.sub-menu').last();
});

请注意,要在阵列中的最后一个元素的jQuery遍历了DOM,所以顶级项将最后一个收藏。



Answer 2:

现在的问题是有些误导。 closest ()可能会被误解。 实际上这意味着,直到找到第一个匹配搜索了树。 所以相反的是,直到找到匹配并且该方法是向下搜索树。 first().

为了找到所有后代一个可能使用find() 。 相反find()parents()

最近()(各级) 对于组中的每一个元素,获取通过测试元件本身并通过其在DOM树遍历的祖先了选择相匹配的第一个元素。

第一()(各级) 降低匹配的元素到所述第一集合中的

父母()(各级) 获取每个元素的祖先在当前匹配的元素集合,其任选被一个选择器过滤的。

父()(下一个级只) 获取每个元素的父在当前匹配的元素集合,其任选被一个选择器过滤的。

找到()(各级)获取在当前匹配的元素集合中的每个元件中,通过选择器,jQuery对象,或元件过滤的后代。



文章来源: Opposite to jQuery's .Closest (Top/Far-Most?)