Sindhu
Sindhu

Reputation: 100

Find active submenu and remove its class

I have a main menu and sub-menu. When I click the main menu it displays its content. When the sub-menu is clicked, the sub-menu contents are displayed. But when I click the main menu after the sub-menu it displays the main menu content along with the sub-menu content because it is not removing the sub-menu active class. I tried the following code to find the id of the active sub-menu and remove it.

var ref = $("ul#submenu li a").find(".active");
var ide= ref.attr("id");
$('#ide').removeClass("active");

For better understanding of my issue I have attached a jsfiddle https://jsfiddle.net/0pmzzp7e/11/

Upvotes: 1

Views: 1089

Answers (3)

user1636522
user1636522

Reputation:

Please do not use inline JavaScript, try to separate JavaScript and HTML as much as possible.

$("ul a[href=\"#home\"]").on("click", function () {
  $(".active").removeClass("active");
  $("#home-content").addClass("active");
});
$("ul a[href=\"#contact\"]").on("click", function () {
  $(".active").removeClass("active");
  $("#contact-content").addClass("active");
});
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="col-sm-12 container">
  <ul class="nav nav-tabs" id="main-menu">
    <li class="active">
      <a href="#home" data-toggle="tab">Home</a>
    </li>
    <li>
      <a href="#contact" data-toggle="tab">Contact</a>
    </li>
  </ul>
  <div class="tab-content clear-fix">
    <!-- Home-->
    <div class="tab-pane active" id="home">
      <ul class="nav nav-tabs">
        <li>
          <a href="#home1" data-toggle="tab">Home 1</a>
        </li>
        <li>
          <a href="#home2" data-toggle="tab">Home 2</a>
        </li>
      </ul>
      <div class="tab-content clear-fix">
        <div class="tab-pane active" id="home-content"> Home Content </div>
        <div class="tab-pane" id="home1"> Home 1 Submenu</div>
        <div class="tab-pane" id="home2">Home 2 Submenu</div>
      </div>
    </div>
    <!-- Contact-->
    <div class="tab-pane" id="contact">
      <ul class="nav nav-tabs">
        <li>
          <a href="#contact1" data-toggle="tab">Contact 1</a>
        </li>
        <li>
          <a href="#contact2" data-toggle="tab">Contact 2</a>
        </li>
      </ul>
      <div class="tab-content clear-fix">
        <div class="tab-pane active" id="contact-content"> Contact Content</div>
        <div class="tab-pane" id="contact1">Contact1 Content</div>
        <div class="tab-pane" id="contact2">Contact2 Content</div>
      </div>
    </div>
  </div>
</div>

Upvotes: 1

Mathias W
Mathias W

Reputation: 1531

You're currently only finding the a tags in the submenu that are active. What I assume you want to do is to check for any active element in the entire tab-pane section. If doing that you can then iterate all the found active items and remove the active class from them as such:

var ref = $(".tab-pane .active")
$(ref).each(function(){
  $(this).removeClass("active");
})

Here's a forked JSFiddle: https://jsfiddle.net/2zd309eo/1/

Upvotes: 0

Eliellel
Eliellel

Reputation: 1446

Is this what you want?

function clickHome(){
   $('#home-content').addClass('active').show();
   $('#home-content').siblings().removeClass('active');
   $("ul#submenu li").removeClass("active");
};
function clickContact(){
    $('#contact-content').addClass('active').show();
    $('#contact-content').siblings().removeClass('active');
    $("ul#submenu li").removeClass("active");
}

https://jsfiddle.net/h1afncux/1/

Upvotes: 1

Related Questions