jQuery - 在父

时间:2017-09-21 18:29:02

标签: javascript jquery html css

我想使用jQuery将活动类添加到<li>,前提是它包含一个具有特定类的嵌套“子元素”。

以下是呈现的HTML代码:

<li class="primary-nav__item primary-nav__item--sub js-header-sub-link">
  <a class="primary-nav__link nav__link--sub js-header-sub-link-a" href="/collections/books">Books</a>
  <div class="nav__sub" id="sub-3">
    <div class="nav__sub-wrap">
      <ul class="nav__sub__items o-list-bare">
        <li class="nav__sub__item">
          <a class="nav__sub__link" href="#">I'm a sub-link</a>
        </li>
        <li class="nav__sub__item nav__sub__item--sub js-header-sub-t-link nav__sub__item--active">
          <a class="nav__sub__link" href="#">I'm a sub-link</a>
        </li>
        <li class="nav__sub__item">
          <a class="nav__sub__link" href="#">I'm a sub-link</a>
        </li>
      </ul>
    </div>
  </div>
</li>

以下是我想要发生的事情:

最外面的<li>只有在包含primary-nav__item--active

等级的“子<li>”时才会获得额外的nav__sub__item--active课程

以下是受影响的代码行:

enter image description here

感谢您的协助!

5 个答案:

答案 0 :(得分:1)

您可以使用.closest()并搜索&#39; .primary-nav__item&#39;然后添加你的课程。

示例:

$('.nav__sub__item--active').closest('.primary-nav__item').addClass('primary-nav__item--active')

答案 1 :(得分:0)

试试这个:

$('.nav__sub__item--active').parent().parent().parent().parent().addClass('primary-nav__item--active')

使用 parent()来获取最外面的 li

的想法

完整代码:

$('.nav__sub__item--active').parent().parent().parent().parent().addClass('primary-nav__item--active')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<li class="primary-nav__item primary-nav__item--sub js-header-sub-link">
  <a class="primary-nav__link nav__link--sub js-header-sub-link-a" href="/collections/books">Books</a>
  <div class="nav__sub" id="sub-3">
    <div class="nav__sub-wrap">
      <ul class="nav__sub__items o-list-bare">
        <li class="nav__sub__item">
          <a class="nav__sub__link" href="#">I'm a sub-link</a>
        </li>
        <li class="nav__sub__item nav__sub__item--sub js-header-sub-t-link nav__sub__item--active">
          <a class="nav__sub__link" href="#">I'm a sub-link</a>
        </li>
        <li class="nav__sub__item">
          <a class="nav__sub__link" href="#">I'm a sub-link</a>
        </li>
      </ul>
    </div>
  </div>
</li>

答案 2 :(得分:0)

您可以使用:

  

.addClass( function ):函数返回一个或多个以空格分隔的类名,以添加到现有的类名中。

$('.primary-nav__item').addClass(function(idx, className) {
    if ($(this).find('li.nav__sub__item--active').length > 0) {
        return 'active';
    }
})
.active {
  background-color: yellow;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<li class="primary-nav__item primary-nav__item--sub js-header-sub-link">
    <a class="primary-nav__link nav__link--sub js-header-sub-link-a" href="/collections/books">Books</a>
    <div class="nav__sub" id="sub-3">
        <div class="nav__sub-wrap">
            <ul class="nav__sub__items o-list-bare">
                <li class="nav__sub__item">
                    <a class="nav__sub__link" href="#">I'm a sub-link</a>
                </li>
                <li class="nav__sub__item nav__sub__item--sub js-header-sub-t-link nav__sub__item--active">
                    <a class="nav__sub__link" href="#">I'm a sub-link</a>
                </li>
                <li class="nav__sub__item">
                    <a class="nav__sub__link" href="#">I'm a sub-link</a>
                </li>
            </ul>
        </div>
    </div>
</li>

答案 3 :(得分:0)

jQuery的closest()函数效率更高:

$('.nav__sub__item--active').each(function() {
 $(this).closest('li.primary-nav__item').addClass('primary-nav__item--active');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li class="primary-nav__item primary-nav__item--sub js-header-sub-link">
    <a class="primary-nav__link nav__link--sub js-header-sub-link-a" href="/collections/books">Books</a>
    <div class="nav__sub" id="sub-3">
      <div class="nav__sub-wrap">
        <ul class="nav__sub__items o-list-bare">
          <li class="nav__sub__item">
            <a class="nav__sub__link" href="#">I'm a sub-link</a>
          </li>
          <li class="nav__sub__item nav__sub__item--sub js-header-sub-t-link nav__sub__item--active">
            <a class="nav__sub__link" href="#">I'm a sub-link</a>
          </li>
          <li class="nav__sub__item nav__sub__item--active">
            <a class="nav__sub__link" href="#">I'm a sub-link</a>
          </li>
        </ul>
      </div>
    </div>
  </li>
</ul>

答案 4 :(得分:0)

您可以使用jQuery closest方法。它找到了具有特定选择器的第一个父元素。

&#13;
&#13;
$( document ).ready(function() {
    $('.nav__sub__item--active').closest('.primary-nav__item').addClass("active");
});
&#13;
.active {
  background-color: red;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<li class="primary-nav__item primary-nav__item--sub js-header-sub-link">
    <a class="primary-nav__link nav__link--sub js-header-sub-link-a" href="/collections/books">Books</a>
    <div class="nav__sub" id="sub-3">
        <div class="nav__sub-wrap">
            <ul class="nav__sub__items o-list-bare">
                <li class="nav__sub__item">
                    <a class="nav__sub__link" href="#">I'm a sub-link</a>
                </li>
                <li class="nav__sub__item nav__sub__item--sub js-header-sub-t-link nav__sub__item--active">
                    <a class="nav__sub__link" href="#">I'm a sub-link</a>
                </li>
                <li class="nav__sub__item">
                    <a class="nav__sub__link" href="#">I'm a sub-link</a>
                </li>
            </ul>
        </div>
    </div>
</li>
&#13;
&#13;
&#13;