Bootstrap 4高亮导航栏激活

时间:2019-03-28 16:38:49

标签: javascript html twitter-bootstrap bootstrap-4

如何在点击时突出显示当前页面?

导航栏

<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
    <ul class="navbar-nav">
        <li class="nav-item active">
            <a class="nav-link active" href="{% url 'page1' %}"> Football
                <span class="sr-only">(current)</span></a>
        </li>
        <li class="nav-item">
            <a class="nav-link" href="{% url 'page2' %}">Overview</a>
        </li>
    </ul>
</div>

.html末尾的脚本

<script src="{% static "JS/master.js" %}" type="text/javascript"></script>

.JS

$(".nav .nav-link").on("click", function(){
   $(".nav").find(".active").removeClass("active");
   $(this).addClass("active");
});

我以前从未做过JS

2 个答案:

答案 0 :(得分:3)

发生这种情况的原因是,当您单击链接时,您将被重定向到新页面。因此,通过JS设置的样式将重置。我要做的是为每个导航元素设置一个id,然后在页面加载时添加活动类,如下所示:

<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
    <ul class="navbar-nav">
        <li id="link-football" class="nav-item active">
            <a class="nav-link active" href="{% url 'page1' %}"> Football
                <span class="sr-only">(current)</span></a>
        </li>
        <li id="link-overview" class="nav-item">
            <a class="nav-link" href="{% url 'page2' %}">Overview</a>
        </li>
    </ul>
</div>

然后在页面加载中,您可以执行以下操作:

//on the football page
$(document).ready(function(){
   $(".active").removeClass("active");
   $("#link-football").addClass("active");
});

进一步的解释:

通过javascript添加的任何样式都会反映在DOM中,但不会覆盖源文件。因此,您的静态页面始终在足球页面上设置了.active。通过F5或JS脚本加载/重新加载页面时,也将重新加载该静态文件,而不会反映通过JS完成的任何更改。这就是为什么我说要在页面加载后在 之后添加active类,原因是您可能知道自己所在的页面,因此调用了活动链接。

我还建议默认情况下不要将任何内容设置为活动状态。您可以将主页设置为默认活动状态,这种情况确实会发生,但是如果您忘记将上述脚本添加到新页面中,则可能会引起混乱。

有关使用IDE和/或使用{% extends 'base.html' %}

进行扩展的说明

要使其在扩展**base.html**时起作用,请将{% block content %}添加到页面末端。即

{% block content %}

{% endblock %}
</body>
</html>

在随后的每个 .html 页面上,将 JS 包裹在 <script> </script>

答案 1 :(得分:2)

我无法判断JS/master.js中发生了什么,但是您的activenav-item中都有类nav-link

我要尝试的第一件事是从active中删除类nav-link,看看是否可行。

接下来我要尝试的是在CSS中添加一个“活动”状态。我在您的script src中看到了Liquid标签,因此,如果您使用的是预制的Jekyll主题,则它可能已经在标记中添加了适当的活动状态。

CSS

/* Active state */
.nav-item.active a {
  color: red;
}

如果这不起作用,则可以使用Bootstrap使用的jQuery。您的脚本很接近,但是正在寻找.nav .nav-link,它不在提供的HTML中。它可能是在标记的更大范围内使用的,但您可以仅定位.nav-link使其生效。

jQuery

var activeNavItem = $('.nav-item');

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

根据您的情况,这可能会或可能不会有帮助。这是有关CodePen的工作演示:https://codepen.io/mikejandreau/pen/BbXKZV

enter image description here