简体   繁体   English

Navbar活动类在Bootstrap 4中不起作用

[英]Navbar active class is not working in bootstrap 4

I am trying to add active class to current opened link in navbar. 我试图将活动类添加到导航栏中当前打开的链接中。 I've Googled it a lot. 我已经用Google搜索了很多。 There are a lot of questions similar to this question in Stack Overflow and answers also, but These all answers are for only hash type of navbar like href="#" and not working when I have a web sites and pages. 在Stack Overflow中也有很多与此问题类似的问题,也有答案,但是这些所有答案仅适用于导航栏的哈希类型,例如href="#" ,当我拥有网站和页面时不起作用。 I want to add active class properly. 我想正确添加活动班级。 I've tried a lot, but didn't find perfect answer. 我已经尝试了很多,但是没有找到完美的答案。

Here is my code: 这是我的代码:

<nav class="navbar navbar-expand-md navbar-dark sticky-top pt-0 pb-0">
    <div class="container nav_container">
        <a class="navbar-brand" href="<?php echo BASE_URL; ?>">
            <img src="<?php echo BASE_URL; ?>/resources/assets/img/logo/logo_default.png" class="img-fluid foodbox_logo">
        </a>
        <button class="navbar-toggler collapsed" type="button" data-toggle="collapse" data-target="#mainNavbar">
          <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="mainNavbar">
          <ul class="navbar-nav ml-auto">
            <li class="nav-item">
              <a class="nav-link active" href="<?php echo BASE_URL; ?>">Home</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="<?php echo BASE_URL; ?>/shop.php">Shop</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="<?php echo BASE_URL; ?>/cart.php">Cart</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="<?php echo BASE_URL; ?>/about-us.php">About Us</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="<?php echo BASE_URL; ?>/contact-us.php">Contact Us</a>
            </li>
          </ul>
        </div>
    </div>
</nav>

JS: JS:

<script>
    $(document).ready(function() {
        $('a.nav-link').on('click', '.nav-item a', function (e) {
            $(this).parent().addClass('active').siblings().removeClass('active');
        });
    });
</script>

Can someone please help me? 有人可以帮帮我吗?

Use the below snippet and also add / at the end of the url's in the navbar. 使用以下代码段,并在导航栏中网址的末尾添加/

   $(document).ready(function() {

   var url = [location.protocol, '//', location.host, location.pathname].join('');  

            $('.nav-item.active').removeClass('active');
            $('.nav-item a[href="' + url  + '"]').parent().addClass('active');
            $(this).parent().addClass('active').siblings().removeClass('active');


    });

You can try below code. 您可以尝试以下代码。

$(document).ready(function() {
        $('.nav-link').on('click', '.nav-item a', function (e) {
             $('.navbar-nav .nav-link').find(".active").removeClass("active");
             $(this).parent().addClass('active');
        });
    });

The definition of jQuery is incorrect. jQuery的定义不正确。 In your code it is trying to find nav-item a inside a.nav-link and it won't find any. 在您的代码中,它试图在a.nav-link找到一个nav-item a ,但找不到任何内容。 Just monitor the click for a.nav-link . 只需监视点击以获取a.nav-link For details see here 详情请看这里

 $(document).ready(function() { /* Temporarily disable hyperlinks to see menu work */ $('a').attr("href", "#"); $('a.nav-link').on('click', function(e) { $(this).parent().addClass('active').siblings().removeClass('active'); }); }); 
 nav { background-color: red; } 
 <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <nav class="navbar navbar-expand-md navbar-dark sticky-top pt-0 pb-0"> <div class="container nav_container"> <a class="navbar-brand" href="<?php echo BASE_URL; ?>"> <img src="<?php echo BASE_URL; ?>/resources/assets/img/logo/logo_default.png" class="img-fluid foodbox_logo"> </a> <button class="navbar-toggler collapsed" type="button" data-toggle="collapse" data-target="#mainNavbar"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="mainNavbar"> <ul class="navbar-nav ml-auto"> <!-- Put class active at the correct level --> <li class="nav-item active"> <a class="nav-link" href="<?php echo BASE_URL; ?>">Home</a> </li> <li class="nav-item"> <a class="nav-link" href="<?php echo BASE_URL; ?>/shop.php">Shop</a> </li> <li class="nav-item"> <a class="nav-link" href="<?php echo BASE_URL; ?>/cart.php">Cart</a> </li> <li class="nav-item"> <a class="nav-link" href="<?php echo BASE_URL; ?>/about-us.php">About Us</a> </li> <li class="nav-item"> <a class="nav-link" href="<?php echo BASE_URL; ?>/contact-us.php">Contact Us</a> </li> </ul> </div> </div> </nav> 

I have tested this code and it's working. 我已经测试了此代码,并且可以正常工作。 I changed your selector a bit. 我稍微改变了选择器。 Give it a shot and see if it works for you. 试一试,看看它是否对您有用。 Adding nav link class to each anchor is redundant when you can simply use the selector below to get to each anchor in your nav. 当您可以简单地使用下面的选择器访问导航中的每个锚点时,向每个锚点添加导航链接类是多余的。

I then traversed your nav anchors and removed the active class and appended active to the item that was clicked. 然后,我遍历了您的导航锚,并删除了活动类,并将活动类附加到了单击的项上。

$(document).ready(function() {
        $(".navbar-nav li a").on('click', function (e) {

            $(".navbar-nav li").find('a').removeClass('active');
            $(this).addClass('active');
        });
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM