假设我有一个这样的菜单......
<ul class="main_menu">
<li class="item-1">
First top level item
<ul>
<li class="item-2">Item 2</li>
<li class="item-3">
Item 3
<ul>
<li class="item-4">Item 4</li>
<li class="item-5">Item 5</li>
</ul>
</li>
<li class="item-6">Item 6</li>
</ul>
</li>
<li class="item-7">
Second top level item
<ul>
<li class="item-8">Item 8</li>
<li class="item-9">Item 9</li>
<li class="item-10">Item 10</li>
<li class="item-11">Item 11</li>
</ul>
</li>
</ul>
...在这种情况下,子菜单可以处于可变深度,如果我只知道子项目,如何获得顶级项目?例如,我知道班级项目-5,然后我想获得班级“项目-1”,或者如果我知道“项目-11”,我想要“项目-7”。
也就是说,无论我在哪里,我都想要“顶级项目X”。
答案 0 :(得分:13)
var topListItem = $(".item-5").parents("li").last();
此解决方案有效,因为parents()
返回从最接近外部元素排序的祖先元素。
如果您希望原始元素成为搜索的一部分(即.item-7
返回自身),那么您可以将parents()
链接到addBack(),然后链接到first():
var topListItem = $(".item-7").parents("li").addBack().first(); // '.item-7'
addBack()
将原始元素添加回父母链中。在这种情况下,我们必须应用first()
而不是last()
,因为addBack()
按文档顺序放置元素(因此顶级元素将是第一个匹配而不是最后一个)
答案 1 :(得分:2)
使用parents()
和last()
;
// assuming 'this' is an `li` element:
var $topLi = $(this).parents('li').last();
请注意,jQuery遍历DOM,因此选择器中的最后一个元素将是顶级父级。
答案 2 :(得分:0)
这将解决问题
$('.item-4').parents('li').last();