0

I want to add a class(active) to a child of an element who has a class (is-active) and does not effect other elements. using jQuery!

<ul>
   <li class="nav-item is-active"><a href="#" class="nav-link">Link 1</a><li>
   <li class="nav-item"><a href="#" class="nav-link">Link 2</a><li>
   <li class="nav-item"><a href="#" class="nav-link">Link 3</a><li>
   <li class="nav-item"><a href="#" class="nav-link">Link 4</a><li>
</ul>

I'm using this code but it's effect all other elements.

if ($(".nav-item").hasClass("is-active")) {
  $('a', this).addClass('active');
}

I want to be like this:

<ul>
       <li class="nav-item is-active"><a href="#" class="nav-link active">Link 1</a><li>
       <li class="nav-item"><a href="#" class="nav-link">Link 2</a><li>
       <li class="nav-item"><a href="#" class="nav-link">Link 3</a><li>
       <li class="nav-item"><a href="#" class="nav-link">Link 4</a><li>
</ul>

4 Answers 4

1

You can chain the selector to target the parent then use .find() to get the child.

$(".nav-item.is-active").find('a').addClass('active')
Sign up to request clarification or add additional context in comments.

Comments

0
if ($(".nav-item").hasClass("is-active")) {
  $(this).find('a').addClass('active');
}

You this code it will work

2 Comments

No, its effect all elements too.
Please check in your html if you have "is-active" class anywhere
0

You can loop through your element and add class if current element has certain class. Here is working example.

var navlist = $(".nav-item");
$.each(navlist, function() {
  if ($(this).hasClass("is-active")) {
    $(this).find('a').addClass('active');
  }
});

console.log($('ul').html())
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
   <li class="nav-item is-active"><a href="#" class="nav-link">Link 1</a><li>
   <li class="nav-item"><a href="#" class="nav-link">Link 2</a><li>
   <li class="nav-item"><a href="#" class="nav-link">Link 3</a><li>
   <li class="nav-item"><a href="#" class="nav-link">Link 4</a><li>
</ul>

Comments

0

You can combine it's into a single selector(which selects a tag within .nav-item having is-active) and then add class to that.

$('.nav-item.is-active a').addClass('active');

$(".nav-item.is-active a").addClass('active');

console.log($('ul').html())
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li class="nav-item is-active"><a href="#" class="nav-link">Link 1</a>
    <li>
      <li class="nav-item"><a href="#" class="nav-link">Link 2</a>
        <li>
          <li class="nav-item"><a href="#" class="nav-link">Link 3</a>
            <li>
              <li class="nav-item"><a href="#" class="nav-link">Link 4</a>
                <li>
</ul>


FYI : In your code this does not refer to the element, it may be window object or something else so it won't work. To make it work use each() method.

$(".nav-item").each(function(){
  if($(this).hasClass("is-active")) {
     $('a', this).addClass('active');
  }
})

$(".nav-item").each(function() {
  if ($(this).hasClass("is-active")) {
    $('a', this).addClass('active');
  }
})

console.log($('ul').html())
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li class="nav-item is-active"><a href="#" class="nav-link">Link 1</a>
    <li>
      <li class="nav-item"><a href="#" class="nav-link">Link 2</a>
        <li>
          <li class="nav-item"><a href="#" class="nav-link">Link 3</a>
            <li>
              <li class="nav-item"><a href="#" class="nav-link">Link 4</a>
                <li>
</ul>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.