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我已经用我的代码检查过了,但不理解事实。。