Jquery 父母与孩子
我有两个级别的列表Jquery 父母与孩子,jquery,Jquery,我有两个级别的列表 <ul> <li></li> <li></li> <li> <ol> <li></li> <li class="active"></li> <li></li> </ol> </li> <
<ul>
<li></li>
<li></li>
<li>
<ol>
<li></li>
<li class="active"></li>
<li></li>
</ol>
</li>
<li></li>
<li></li>
</ul>
-
如何使用内部LI活动类将新类添加到父LI中,如
<ul>
<li class="parent">
<ol>
<li class="active">
-
-
我认为这会奏效
$('.active').parent().parent().addClass('parent');
你有几个选择,但我认为:
$('.active').parents('li:first').addClass('parent');
$('.active').parents('li').first().addClass('parent');
…可能是最简单、最清晰的
$('.active').parent().closest('li').addClass('parent');
…第二名
您不能直接转到最近的
,因为最近的
是从您正在查看的元素开始的,因此会返回自身
例如:
$(“li.active”).parents(“li”).first().addClass(“parent”)代码>
.active{
颜色:红色;
}
.家长{
颜色:绿色;
}
- a
- b
-
- c
- d
- e
- f
- g
您的答案
你应使用:
$('.active').parents('li:first').addClass('parent');
如果要获取第一个父项或:
$('.active').parents('li').addClass('parent');
如果你想得到所有的父母
为什么不使用最近的
jQuery有最近的()方法。通常,这是我们应该使用的,但在本例中,。最近('li')
将返回自身,因为它在检查中包含当前元素
但是,正如所指出的,您可以在选择器中使用:not()
,以排除活动的,如下所示:
$('.active').closest('li:not(.active)').addClass('parent');
更多解决方案
- 他有其他可行的解决方案李>
我认为下面给出的代码是最好的解决方案,因为最近的()将在dom中向上移动,直到找到匹配项,而父()将向上移动到文档的根,这将非常昂贵
$('.active')。最近('li:not(.active'))。addClass('parent') $('.active')。parents('li:first')。addClass('parent')
@Karl AndréGagnon:你应该把它作为一个答案,它比当前的任何一个都好。您可能还想解释为什么不使用最近的(您有很好的理由,但一开始很容易漏掉)。@t.J.Crowder我应该这样做吗?我的意思是,因为这么简单的问题而获得名声是不对的。。。好吧,我会的。@A.Wolff.li会回来的itself@A.Wolff确实会。什么是最好的,我不知道。但我不明白为什么它选择了我所回答的最接近的当前元素…@Bhojendra-C-LinkNepal:因为最接近的首先检查集合中已经存在的元素,看它们是否匹配,如果不匹配,则只返回到父元素!我以前不知道这件事。非常感谢。@Bhojendra-C-LinkNepal,@T.J.Crowder,用一个例子来演示某事总是比较容易的:检查li
@Karl AndréGagnon我已经用我的代码检查过了,但不理解事实。。