如何在点击上设置活动类?

时间:2015-12-11 15:54:38

标签: jquery

所以我在我的标题上有这个导航,但问题是当我点击链接并将我重定向到该页面时它会失去活动类。有什么建议吗?

<nav>
  <div class="menu-topmenu-container">
    <ul id="menu-topmenu" class="menu">
      <li id="whats-on" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-53">
         <a href="#whatson" class="active">What’s On</a>
      </li>
      <li id="menu-item-52" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-52">
         <a href="visiting-us">Visiting Us</a>
      </li>
      <li id="menu-item-46" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-33 current_page_item menu-item-46">
        <a href="collections-research">Collections &amp; Research</a>
      </li>
      <li id="menu-item-50" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-50">
        <a href="learning">Learning</a>
      </li>
      <li id="menu-item-49" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-49">
          <a href="get-involved">Get Involved</a>
      </li>
   </div>
</nav>

这是我的剧本:

jQuery(function($){
    $('nav ul li a').on('click', function () {
        $(this).closest('nav ul').find('a.active').removeClass('active');
        $(this).addClass('active');        
    });
});

3 个答案:

答案 0 :(得分:4)

这是因为当您点击链接时,您会转到另一个页面。

未经测试,现在就写了这个,但是这样的话:

$(function(){
  var href=window.location.href;
  $('nav a').each(function(e,i){
    if (href.indexOf($(e).attr('href'))>=0)
    {
      $(e).addClass('active');
    }
  });
});

您还可以使用数据属性而不是href进行比较,这可能会更容易一些,并且可以更自定义地处理像索引页这样的奇怪情况。当然,既然您从服务器获取了html,那么您也可以让服务器将活动类放在适当的链接上。

答案 1 :(得分:1)

好像您可能导航到新页面,您应该将ID存储在本地存储中,如下所示:

$('body').on('click', 'nav ul li a' , function () {
    $(this).closest('nav ul').find('a.active').removeClass('active');
    localStorage.setItem('lastActiveId', $(this).attr('id'));      
});

然后在加载时你需要设置它

$(function () {
    var lastId = localStorage.getItem('lastActiveId', $(this).attr('id'));
    //check if defined
    if(!!lastId)
    {
        $('#' + lastId).addClass('active');      
    }
});

答案 2 :(得分:0)

首先,关闭<ul>

嗯,在我看来,用PHP做你想做的事情会更容易。也许this可以帮到你。