父母与子女

时间:2014-11-28 14:02:38

标签: jquery

我有两个级别列表

<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">

4 个答案:

答案 0 :(得分:5)

您的回答

您应该使用:

$('.active').parents('li:first').addClass('parent');

如果您想获得第一位家长或:

$('.active').parents('li').addClass('parent');

如果你想要所有的父母。

为什么不使用最近的

jQuery具有closest()方法。通常,这是我们应该使用的内容,但在这种情况下,.closest('li')将自行返回,因为它包含支票中的当前元素

但是,正如A.Wolff指出的那样,你可以在选择器中使用:not()来排除活动的,就像那样:

$('.active').closest('li:not(.active)').addClass('parent');

更多解决方案

答案 1 :(得分:1)

你有几个选择,但我认为:

$('.active').parents('li:first').addClass('parent');

$('.active').parents('li').first().addClass('parent');

......可能最简单,最清晰,

$('.active').parent().closest('li').addClass('parent');

......排在第二位。

你不能直接进入closest因为closest从你正在看的元素开始,所以会自行返回。

示例:

$("li.active").parents("li").first().addClass("parent");
.active {
  color: red;
}
.parent {
  color: green;
}
<ul>
   <li>a</li>
   <li>b</li>
   <li>
      <ol>
         <li>c</li>
         <li class="active">d</li>
         <li>e</li>
      </ol>
   </li>
   <li>f</li>
   <li>g</li>
</ul>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

答案 2 :(得分:0)

我认为这会奏效。

$('.active').parent().parent().addClass('parent');

答案 3 :(得分:0)

我认为下面给出的代码是最好的解决方案,因为nearest()将在dom中向上移动,直到找到匹配,而parent()将向上移动到文档的根目录,这将是昂贵的。

$(&#39;。主动&#39)接近的(&#39;李:否(。主动)&#39)。addClass(&#39;父&#39);