0

I have ul.menu for which few li are styled differently, therefore those li dont need to add active class.

<ul class="menu">
   <li id="1st" class="default"><a href="#">Text1</a></li>
   <li id="2nd" class="default"><a href="#">Text2</a></li>
   <li class="cross-out"><a href="#">Text3</a></li>
</ul>

jQuery to add active class for first two links, except li.cross-out

$('ul.menu li').click(function(){
    $('ul.menu li').removeClass('active');
    $(this).not('cross-out').addClass('active');
});

What is wrong? Hope I was clear enough...

Josh Crozier
  • 233,099
  • 56
  • 391
  • 304
01e5Dk
  • 390
  • 1
  • 2
  • 14

3 Answers3

3

You forgot the class identifier before cross-out:

$('ul.menu li').click(function(){
    $('ul.menu li').removeClass('active');
    $(this).not('.cross-out').addClass('active');
});
dsgriffin
  • 66,495
  • 17
  • 137
  • 137
  • Thanks, dsg! But for the community this post should be deleted, since the question is not helpful to others... My mistake, sorry! – 01e5Dk Oct 23 '14 at 18:09
0

Jquery has a toggle class function

$("#td_id").toggleClass('default active');

related post jquery change class name

Community
  • 1
  • 1
JWarren
  • 113
  • 5
0

The period makes all the difference. Then because you may have several other ul.menu elements on your page, you just want the one whose li was clicked to change:

$('ul.menu li').click(function(){
    $(this).siblings('li.active').removeClass('active');
    $(this).not('.cross-out').addClass('active');
});

$('ul.menu li').click(function(){
        $(this).siblings('li.active').removeClass('active');
        $(this).not('.cross-out').addClass('active');
    });
.active {
  background-color:gray;
  font-weight:bolder;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="menu">
   <li class="default"><a href="#">Text1</a></li>
   <li class="default"><a href="#">Text2</a></li>
   <li class="cross-out"><a href="#">Text3</a></li>
</ul>

<ul class="menu">
   <li class="default"><a href="#">Text1</a></li>
   <li class="default"><a href="#">Text2</a></li>
   <li class="cross-out"><a href="#">Text3</a></li>
</ul>

<ul class="menu">
   <li class="default"><a href="#">Text1</a></li>
   <li class="default"><a href="#">Text2</a></li>
   <li class="cross-out"><a href="#">Text3</a></li>
</ul>
PeterKA
  • 24,158
  • 5
  • 26
  • 48