【问题标题】:how to dynamically set the active class in bootstrap navbar?如何在引导导航栏中动态设置活动类?
【发布时间】:2016-02-16 08:42:39
【问题描述】:

我正在使用带有 codeigniter 作为后端的引导导航栏。

现在在我的应用程序中,我想将

  • 类更改为为每个页面动态激活。

    所以我可以知道我当前在哪个页面上。

    下面是我的代码:

    <ul class="nav navbar-nav">
          <li class="active"><a href="<?php echo site_url('admin/dashboard'); ?>">Dashboard</a></li>
            <li><a href="<?php echo site_url('admin/company');?>">Company</a></li>
            <li><a href="<?php echo site_url('admin/user');?>">Users Management</a></li>
            <li><a href="<?php echo site_url('admin/key');?>">Key Management</a></li>
            <li><a href="<?php echo site_url('admin/activation');?>">Activated Devices</a></li>
    
      </ul>
     <ul class="nav navbar-nav navbar-right">
    
  • 【问题讨论】:

    标签: html css twitter-bootstrap


    【解决方案1】:

    您可以使用此 javascript 根据当前 url 添加活动类,请尝试一下

    <script type="text/javascript">
        $(document).ready(function () {
            var url = window.location;
            $('ul.nav a[href="'+ url +'"]').parent().addClass('active');
            $('ul.nav a').filter(function() {
                 return this.href == url;
            }).parent().addClass('active');
        });
    </script> 
    

    【讨论】:

    • 像魅力一样工作......非常感谢
    • 我似乎不需要$('ul.nav a[href="'+ url +'"]').parent().addClass('active');,只有下的声明。对这里发生的事情有任何解释吗?
    【解决方案2】:

    你不能用这个替换你的&lt;a&gt; 标签。这将匹配当前的 uri 字符串,以及链接 href 属性。如果匹配,则将active 类添加到链接中。你可以使用你来设置.active的样式

    <a href="<?php echo site_url('admin/company'); ?>" class="<?php if($this->uri->uri_string() == 'admin/company') { echo 'active'; } ?>">Company</a>
    

    所以整个代码就是这样。

    <ul class="nav navbar-nav">
          <li><a href="<?php echo site_url('admin/dashboard'); ?>" class="<?php if($this->uri->uri_string() == 'admin/dashboard') { echo 'active'; } ?>">Dashboard</a></li>
          <li><a href="<?php echo site_url('admin/company'); ?>" class="<?php if($this->uri->uri_string() == 'admin/company') { echo 'active'; } ?>">Company</a></li>
          <li><a href="<?php echo site_url('admin/user'); ?>" class="<?php if($this->uri->uri_string() == 'admin/user') { echo 'active'; } ?>">Users Management</a></li>
          <li><a href="<?php echo site_url('admin/key'); ?>" class="<?php if($this->uri->uri_string() == 'admin/key') { echo 'active'; } ?>">Key Management</a></li>
          <li><a href="<?php echo site_url('admin/activation'); ?>" class="<?php if($this->uri->uri_string() == 'admin/activation') { echo 'active'; } ?>">Activated Devices</a></li>
    </ul>
    <ul class="nav navbar-nav navbar-right">
    

    【讨论】:

    • 不明白这是怎么回事?
    【解决方案3】:

    您的页面应该知道应该将哪个菜单设置为活动的。

    尝试向您的&lt;li&gt; 添加一个 ID,然后向您的页面添加一个 JavaScript 代码,以根据 ID 设置活动菜单。 示例:

    <ul class="nav navbar-nav">
          <li id="menu-dashboard" class="active"><a href="<?php echo site_url('admin/dashboard'); ?>">Dashboard</a></li>
            <li id="menu-company"><a href="<?php echo site_url('admin/company');?>">Company</a></li>
            <li id="menu-user"><a href="<?php echo site_url('admin/user');?>">Users Management</a></li>
            <li id="menu-key-management"><a href="<?php echo site_url('admin/key');?>">Key Management</a></li>
            <li id="menu-activation"><a href="<?php echo site_url('admin/activation');?>">Activated Devices</a></li>
      </ul>
    
    <script>
    var menuid = "menu-dashboard";
    $(function() {
        $('.nav li').removeClass('active');
        $(menuid).addClass("active");
    });
    </script>
    

    页面: 将以下 javascript 行添加到您的页面

    • 公司页面

      menuid = "#menu-company";

    • 用户页面

      menuid = "#menu-user";

    【讨论】:

      【解决方案4】:

      您可以使用 jQuery 或 JavaScript 来实现。

      jQuery 示例:

      $('.nav li').click(function(){
          $('.nav li').removeClass('active');
          $(this).addClass('active');
      });
      

      【讨论】:

      • 当我点击它时,这部分工作将活动更改为该链接,但是当我被重定向到该页面时,它再次成为活动的仪表板
      【解决方案5】:

      接受答案中的jQuery 不知道访问者来自http://example.comhttp://example.com/index.php 的区别,并且不会激活“主页”菜单项。这是我的解决办法。

      HTML 这是我菜单中的一个 sn-p:

      <div class='navbar'>
          <a href='index.php'><div class='nav-icon icon-home'></div>Hem</a>
          <a href='calender.php'><div class='nav-icon icon-calender'></div>Kalender</a>
          <a href='exchange.php#utbyte'><div class='nav-icon icon-byte'></div>Byten</a>
      </div>
      

      这是我添加到我的数据库控制器类中的一个函数,用于找出访问者使用的协议:

      public static function adr_protocol()
      {
          $str = 'http://';
          if(isset($_SERVER['HTTPS']) && 'on' === $_SERVER['HTTPS']) $str = 'https://';
          return $str;
      }
      

      jQuery:

      ;var ix = '<?php echo DBController::adr_protocol()."{$_SERVER['HTTP_HOST']}/"; ?>';
      var url = (window.location==ix)?window.location+'index.php':window.location;
      $('div.navbar a[href="'+ url +'"]').parent().addClass('active');
      $('div.navbar a').filter(function() {
          return this.href == url;
      }).addClass('active');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-18
        • 2013-08-15
        • 2014-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-27
        • 1970-01-01
        相关资源
        最近更新 更多