我有很多子菜单的共享相同的类名称的代码。
这里有一个结构:
.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').click(function() {
var $topSubMenu = $(this).parents('.sub-menu').last();
});
请注意,要在阵列中的最后一个元素的jQuery遍历了DOM,所以顶级项将最后一个收藏。
现在的问题是有些误导。 closest
()可能会被误解。 实际上这意味着,直到找到第一个匹配搜索了树。 所以相反的是,直到找到匹配并且该方法是向下搜索树。 first().
为了找到所有后代一个可能使用find()
。 相反find()
是parents()
最近()(各级) 对于组中的每一个元素,获取通过测试元件本身并通过其在DOM树遍历的祖先了选择相匹配的第一个元素。
第一()(各级) 降低匹配的元素到所述第一集合中的
父母()(各级) 获取每个元素的祖先在当前匹配的元素集合,其任选被一个选择器过滤的。
父()(下一个级只) 获取每个元素的父在当前匹配的元素集合,其任选被一个选择器过滤的。
找到()(各级)获取在当前匹配的元素集合中的每个元件中,通过选择器,jQuery对象,或元件过滤的后代。