最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - addremove class on click, navigation li item - Stack Overflow

programmeradmin1浏览0评论

I was trying to find solution but i can't, every single code wasn't good for my project. Here is navigation structure

<nav>
  <ul class="menu">
    <li>
      <ul class="submenu">
        <li><a></a></li>
        <li><a></a></li>
        <li><a></a></li>
        <li><a></a></li>
      </ul>
    </li>
    <li>
      <ul class="submenu">
        <li><a></a></li>
        <li><a></a></li>
        <li><a></a></li>
        <li><a></a></li>
      </ul>
    </li>
    <li></li>
    <li></li>
  </ul>
</nav>

I was trying to find solution but i can't, every single code wasn't good for my project. Here is navigation structure

<nav>
  <ul class="menu">
    <li>
      <ul class="submenu">
        <li><a></a></li>
        <li><a></a></li>
        <li><a></a></li>
        <li><a></a></li>
      </ul>
    </li>
    <li>
      <ul class="submenu">
        <li><a></a></li>
        <li><a></a></li>
        <li><a></a></li>
        <li><a></a></li>
      </ul>
    </li>
    <li></li>
    <li></li>
  </ul>
</nav>

$(".menu li").click(function(){
    $(this).toggleClass("visible");
});
$('body').click(function(){
	
  if( $(".menu li").hasClass("visible") ){
   $(".menu li").removeClass("visible");
  
  	    };
  });

What a want to achieve is next:

  • When i click on .menu li to add class active
  • When i click on another .menu li item or on .submenu li a, remove class active from another li item that has that class
  • And also when i click anywhere else (example body) also remove class from .menu li

I hope you understand what i want. Sorry for my bad grammar

Update:

Toggle Solution

Modified code by: @Sasa Novakovic (thank you again bro :) )

function removeActiveMenuClass(active_element){
    $('.menu li').not(active_element).removeClass('visible');
}

$( '.menu>li' ).click(function(e) {
    e.stopPropagation();
    var $_this = $(this);

    removeActiveMenuClass($_this);
    if ($_this.hasClass('visible')) {
        $_this.removeClass('visible');
    }
    else {
        $_this.addClass('visible');
    }
});

$('body').click(function() {
    removeActiveMenuClass();
});

Share Improve this question edited Jun 19, 2015 at 7:52 Stefan asked Jun 17, 2015 at 8:11 StefanStefan 6676 silver badges19 bronze badges 3
  • every single code wasn't good for my project Where is your code? – Mivaweb Commented Jun 17, 2015 at 8:13
  • A list of requirements is not a decent question for on Stack Overflow. – PeeHaa Commented Jun 17, 2015 at 8:15
  • @PeeHaa ...and yours – Stefan Commented Jun 17, 2015 at 13:41
Add a ment  | 

3 Answers 3

Reset to default 5

Here is the code for you jsfiddle.

$('html').click(function() {
    removeActiveMenuClass();
});

$( '.menu>li, .submenu>li' ).click(function(e) {
    e.stopPropagation();
    removeActiveMenuClass();
    $(this).addClass('active');
});

function removeActiveMenuClass(){
    $('.menu li').removeClass('active');
}

$('.submenu li').click(function(){
    $('.submenu li').removeClass('addclass');
    $(this).addClass('addclass');
})
$(document).mouseup(function(){
    $('.submenu li').removeClass('addclass');
})
.addclass{
    background-color:red;
}
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav>
  <ul class="menu">
    <li>
      <ul class="submenu">
        <li><a>submenu1</a></li>
        <li><a>submenu2</a></li>
        <li><a>submenu3</a></li>
        <li><a>submenu4</a></li>
      </ul>
    </li>
    <li>
      <ul class="submenu">
        <li><a>submenu1</a></li>
        <li><a>submenu2</a></li>
        <li><a>submenu3</a></li>
        <li><a>submenu4</a></li>
      </ul>
    </li>
    <li></li>
    <li></li>
  </ul>
</nav>

Try adding this snippet to your HTML:

<script>
var options = $('.menu').find('li');
options.onclick(function(){
    $('.active').removeClass('active');
    $(this).addClass('active');
});
$('*').not(options).click(function(){$('.active').removeClass('active')});
</script>
发布评论

评论列表(0)

  1. 暂无评论