【问题标题】:Bootstrap 4 navbar nav-item active class not workingBootstrap 4导航栏导航项活动类不起作用
【发布时间】:2020-07-17 11:47:27
【问题描述】:

我非常绝望,我检查了 stackoverflow 上的所有类似问题,并尝试了在谷歌上找到的许多解决方案,但徒劳无功......我真的无法找到解决我的问题的有效解决方案。
我正在使用 Bootstrap 4 开发一个站点,并且我有一个导航栏。当我单击其中一个导航链接时,我希望它具有“活动”类,而其他人保持正常。 我可能没有选择正确的元素或使用错误的 jquery/javascript 代码。

导航栏 html 代码 (1) 位于一个单独的 header.html 文件中,我在 html 页面的开头使用 JS 加载该文件(2)
(1)

<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top ml-auto">
        <div class="container">
            <a class="navbar-brand" href="../index.html#"><img src="../images/DSIMB.svg" alt=""></a>
            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarResponsive">
                <ul class="navbar-nav ml-auto">
                    <li class="nav-item dropdown">
                        <a class="nav-link dropdown-toggle" href="" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Team</a>
                        <div class="dropdown-menu" aria-labelledby="dropdown01">
                            <a class="dropdown-item" href="members.html#">Members</a>
                            <a class="dropdown-item" href="publications.html#">Publications</a>
                            <a class="dropdown-item" href="teaching.html#">Teaching</a>
                        </div>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="web_tools.html#">Web Tools</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="research.html#">Research</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="infrastructures.html#">Infrastructures</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="news.html#">News</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="contacts.html#">Contacts</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>

(2)

<script>
        $(function() {
            $("#header").load("./header.html");
        });
</script>

这是我放在html页面末尾&lt;/body&gt;标签之前的JS:

<script>
    $('.navbar .nav-item .navlink').click(function() {
        $('.navbar .nav-item').removeClass('active');
        $(this).addClass('active');
    })
</script>

这里是我想设置为活动导航链接的活动 css 类:

.navbar .nav-item > .nav-link.active  {
    color:white;
    font-weight: 700;
}

请告诉我我做错了什么......


更新

我把找到的解决方案放在这里,这要归功于取自this site 的一个简单的 sn-p(我适应了我的代码),@NmiDev 亲切地指出了我。
由于 href / location 解析,我将自定义活动类添加到导航栏中的链接:

$("#header").load("./header.html", function(){
    $('a[href="' + location.pathname.split("/")[2] + '"]').addClass("active-nav");
});

【问题讨论】:

    标签: javascript jquery html css bootstrap-4


    【解决方案1】:

    这里是一个sn-p。

    希望对你有所帮助。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
        <style>
            .active  {
                color: red !important;
            }
        </style>
    </head>
    <body>
        <nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top ml-auto">
            <div class="container">
                <a class="navbar-brand" href="../index.html#"><img src="../images/DSIMB.svg" alt=""></a>
                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="collapse navbar-collapse" id="navbarResponsive">
                    <ul class="navbar-nav ml-auto">
                        <li class="nav-item dropdown">
                            <a class="nav-link dropdown-toggle" href="" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Team</a>
                            <div class="dropdown-menu" aria-labelledby="dropdown01">
                                <a class="dropdown-item" href="#">Members</a>
                                <a class="dropdown-item" href="#">Publications</a>
                                <a class="dropdown-item" href="#">Teaching</a>
                            </div>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="#">Web Tools</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="#">Research</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="#">Infrastructures</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="#">News</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link" href="#">Contacts</a>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
    
        <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
    
        <script>
            $('.nav-link').click(function() {
                $('.nav-link').removeClass('active');
                $(this).addClass('active');
            })
        </script>
    </body>
    </html>

    看来您不需要重写 css 活动类。白色是默认行为。

    【讨论】:

    • 感谢您提供帮助,但它不起作用......也许只有href="#" 但我有真正的链接,并且活动课程没有持续存在。我也在他们的网站上使用默认的引导程序 sn-p 尝试过这样的操作,只要它与href="#" 保持一致,它就可以工作,但是如果我在新页面加载时放置真正的hrefs,活动类就会消失
    • 这可能意味着您重新加载了整个页面,包括标题。这可以解释活动类的不持久性。确保在标题下加载路线的内容?
    • 我没有这个项目的完整背景,但这也许可以帮助你:css-tricks.com/snippets/jquery/…
    • 哦,好吧,我明白了,也许这就是问题所在,我按照this solution 将我的标题包含在我的静态 html 页面中。我不是很有经验,所以决定使用 bootstrap 4 作为框架(没有 php 等)的完整静态 html css 和 js 网站。你能建议一种不重新加载整个页面的方法吗?
    • 您想要创建一个单页应用程序。现代框架使用这个概念(React、Angular 或 Vue)。您想要进行客户端路由。我不确定是否有一种简单的方法可以做到这一点。在您的入口点 index.html 中,将页眉和页脚设为静态,您可以处理每个链接的点击并在根 DIV 中显示内容。这是一个旧资源,但它可以帮助您了解您要做什么:joakim.beng.se/blog/posts/a-javascript-router-in-20-lines.html
    猜你喜欢
    • 2019-07-01
    • 1970-01-01
    • 2018-08-05
    • 2015-12-25
    • 2018-09-03
    • 2018-11-30
    • 1970-01-01
    • 2018-03-22
    • 2018-09-03
    相关资源
    最近更新 更多