Jquery when slide down, changing background color

Viewed 149

I have some HTML, CSS and JQuery Code. When I do slide down and up, I want to change my "h3" background color with jquery like the below image, it should be reddish. As a result, when I slide down, it must be changed with jquery code.

Sidebar

My accordion sidebar code is :

`<div id="accordion">
  <ul>
    <li class="active">
      <h3><span class="icon-dashboard"><i class="far fa-bell"></i></span>Notifications<span class="notification-span">29</span></h3>
    </li>
    <li >
      <h3 class="tooltip"><span class="icon-coffee"><i class="fab fa-slideshare"></i></span>Summary </h3>
    <ul class">
      <li class="accordion-li"><a href="#">Lorem</a></li>
      <li class="accordion-li"><a href="#">Ipsum</a></li>
    </ul>
      </li>

    <li>
      <h3><span class="icon-cloud"><i class="fas fa-edit"></i></span>Publish</h3>
    <ul>
      <li class="accordion-li"><a href="#">Lorem</a></li>
      <li class="accordion-li"><a href="#">Ipsum</a></li>
      
    </ul>
    </li>

 <li>
      <h3><span class="icon-cloud"><i class="far fa-comments"></i></span>Engage</h3>
    <ul>
      <li class="accordion-li"><a href="#">Lorem</a></li>
      <li class="accordion-li"><a href="#">Ipsum</a></li>
    </ul>
    </li>

    <li>
        <h3><span class="icon-cloud"><i class="fas fa-volume-up"></i></span>Listen</h3>
      <ul>
        <li class="accordion-li"><a href="#">Lorem</a></li>
        <li class="accordion-li"><a href="#">Ipsum</a></li>
      </ul>
      </li>

      <li>
        <h3><span class="icon-cloud"><i class="fas fa-chart-line"></i></span>Report</h3>
      <ul>
        <li class="accordion-li"><a href="#">Lorem</a></li>
        <li class="accordion-li"><a href="#">Ipsum</a></li>
        
      </ul>
      </li>


  </ul>
</div>`

My Accordion Css code is:

/*Accordion Menu*/

#accordion {
    width: 100%;
    background-color: #393d42;
    color:#fff;
}

#accordion h3{
    text-transform: uppercase;
    font-size:12px;
    line-height:34px;
    padding:10px 10px;
    cursor:pointer;
  }

  #accordion h3:hover{
      background-color: #f55661;
  }

  #accordion h3:link{
    background-color:red;

  }
 

  /* links */
  #accordion ul ul li a{
    color:white;
    display:block;
    font-size:11px;
    line-height:27px;
    padding: 0 15px;
    text-decoration:none;
    transition: all .1s;
    background-color: #32363a;
    
  }
  
  /* hover effect */
  #accordion ul ul li a:hover{
    background-color: #f55661;
  }


  /* hide non-actives by default */
  #accordion ul ul{
    display:none;
  }
  
  #accordion li.active ul{
    display:block;
  }

  
  /* Icon font styles */
  #accordion h3 span{
    font-size:16px;
    padding-right:10px;
  }

  i{
      font-weight: 100;
     color:#f55661;
  }

  h3:hover i{
      color: #fff;
  }

I have to change my jquery code. Here we are :

    $("#accordion h3").click(function(){

  // slide up the list
  $("#accordion ul ul").slideUp("fast");
  //$( "#accordion ul  li h3 ").css('background-color', '#f55661  ');


  // slide down if it is closed
  if(!$(this).next().is(":visible")){
    $(this).next().slideDown("fast")
  }
})

Edit:I added this code but it makes all h3 reddish. I have to choose specific one, like "this" command.

   $("#accordion ul li h3").css('background-color', '#f55661  ');
2 Answers

You can toggle a class that applies the background color using the .toggleClass() function.

Additionally, you have to loop through all other lists and remove the open class. This can be done via siblings().find('h3').removeClass('open'), which loops through all siblings, finds the h3 element and removes the open class.

$("#accordion h3").click(function() {
  $(this).toggleClass('open');
  $(this).parent().siblings().find('h3').removeClass('open');
  $("#accordion ul ul").slideUp("fast");
  if (!$(this).next().is(":visible")) {
    $(this).next().slideDown("fast");
  }
})
/*Accordion Menu*/

#accordion {
  width: 100%;
  background-color: #393d42;
  color: #fff;
}

#accordion h3 {
  text-transform: uppercase;
  font-size: 12px;
  line-height: 34px;
  padding: 10px 10px;
  cursor: pointer;
}

#accordion h3:hover {
  background-color: #f55661;
}

#accordion h3:link {
  background-color: red;
}

.tooltip.open {
  background-color: #f55661;
}


/* links */

#accordion ul ul li a {
  color: white;
  display: block;
  font-size: 11px;
  line-height: 27px;
  padding: 0 15px;
  text-decoration: none;
  transition: all .1s;
  background-color: #32363a;
}


/* hover effect */

#accordion ul ul li a:hover {
  background-color: #f55661;
}


/* hide non-actives by default */

#accordion ul ul {
  display: none;
}

#accordion li.active ul {
  display: block;
}


/* Icon font styles */

#accordion h3 span {
  font-size: 16px;
  padding-right: 10px;
}

i {
  font-weight: 100;
  color: #f55661;
}

h3:hover i {
  color: #fff;
}

.open {
  background-color: #f55661;
}
.open i{
  color:white;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" integrity="sha512-iBBXm8fW90+nuLcSKlbmrPcLa0OT92xO1BIsZ+ywDWZCvqsWgccV3gFoRBv0z+8dLJgyAHIhR35VZc2oM/gI1w==" crossorigin="anonymous" referrerpolicy="no-referrer" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="accordion">
  <ul>
    <li class="active">
      <h3><span class="icon-dashboard"><i class="far fa-bell"></i></span>Notifications<span class="notification-span">29</span></h3>
    </li>
    <li>
      <h3 class="tooltip"><span class="icon-coffee"><i class="fab fa-slideshare"></i></span>Summary </h3>
      <ul>
        <li class="accordion-li "><a href="# ">Lorem</a></li>
        <li class="accordion-li "><a href="# ">Ipsum</a></li>
      </ul>
    </li>

    <li>
      <h3><span class="icon-cloud "><i class="fas fa-edit "></i></span>Publish</h3>
      <ul>
        <li class="accordion-li "><a href="# ">Lorem</a></li>
        <li class="accordion-li "><a href="# ">Ipsum</a></li>

      </ul>
    </li>

    <li>
      <h3><span class="icon-cloud "><i class="far fa-comments "></i></span>Engage</h3>
      <ul>
        <li class="accordion-li "><a href="# ">Lorem</a></li>
        <li class="accordion-li "><a href="# ">Ipsum</a></li>
      </ul>
    </li>

    <li>
      <h3><span class="icon-cloud "><i class="fas fa-volume-up "></i></span>Listen</h3>
      <ul>
        <li class="accordion-li "><a href="# ">Lorem</a></li>
        <li class="accordion-li "><a href="# ">Ipsum</a></li>
      </ul>
    </li>

    <li>
      <h3><span class="icon-cloud "><i class="fas fa-chart-line "></i></span>Report</h3>
      <ul>
        <li class="accordion-li "><a href="# ">Lorem</a></li>
        <li class="accordion-li "><a href="# ">Ipsum</a></li>

      </ul>
    </li>


  </ul>
</div>

As mentioned in Spectric's answer, toggling classes is probably ideal, especially if you want to apply CSS transitions to make the color change smoother.

However, given the trajectory you were on, you can accomplish what you're trying to do with the following jQuery:

$("#accordion h3").click(function(){

  // Close all previously-opened menu items
  $("#accordion ul ul").slideUp("fast");
  // Reset color of all h3s to dark gray
  $('#accordion h3').css('background-color', '#393d42')

  // then...
  // For the clicked header, set red bg color
    $(this).css('background-color', '#f55661');
    // and slide it's sub menu open
    $(this).next().slideDown("fast")
})
Related