Bootstrap 4 突出显示导航栏活动

Mat*_*hew 0 html javascript 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>
Run Code Online (Sandbox Code Playgroud)

.html 末尾的脚本

<script src="{% static "JS/master.js" %}" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

.JS

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

PS我以前没做过JS

Cri*_* C. 8

发生这种情况的原因是当您单击链接时,您会被重定向到一个新页面。所以通过 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>
Run Code Online (Sandbox Code Playgroud)

然后在页面加载时你可以这样做:

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

进一步说明:

您通过 javascript 添加的任何样式都会反映在 DOM 中,但不会覆盖源文件。所以你的静态页面总是.active设置在足球页面上。当您通过 F5 或 JS 脚本加载/重新加载页面时,您还会重新加载该静态文件,而不会反映通过 JS 完成的任何更改。这就是我说在页面加载添加active类的原因,因为这样您可能知道自己在哪个页面上,因此会标注活动链接。

我还建议默认情况下不要将任何设置为活动状态。您可以将主页设为默认活动页面,我看到会发生这种情况,但是如果您忘记将上述脚本添加到新页面,则可能会导致您在此过程中出现一些混乱。

使用 IDE 和/或扩展使用的注意事项 {% extends 'base.html' %}

要在扩展 时使其正常工作,请在页面的末尾**base.html**添加{% block content %}。IE

{% block content %}

{% endblock %}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

以后每次上的.html页面包住JS<script> </script>

  • 我不确定你使用的是什么 html 预处理器/模板,但我给了你一个例子。我提供的 JS 应该出现在您的两个(或所有)页面上。但这一切都会略有不同。`$("#link-football")` 应该只用于足球页面,前提是您想要激活的元素将其作为 id。 (2认同)

Mik*_*eau 5

我不知道发生了什么JS/master.js,但是您activenav-itemnav-link.

我想尝试的第一件事是消除类activenav-link,看看是否能工程。

我要尝试的下一件事是向您的 CSS 添加一个“活动”状态。我在你的 中看到 Liquid 标签script src,所以如果你使用的是预先制作的 Jekyll 主题,它可能已经在标记中添加了适当的活动状态。

CSS

/* Active state */
.nav-item.active a {
  color: red;
}
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,您可以使用 Bootstrap 使用的 jQuery。您的脚本很接近,但它正在寻找.nav .nav-link,这不在提供的 HTML 中。它可能在您的标记的更大上下文中,但您可以定位只是.nav-link为了使其工作。

jQuery

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

activeNavItem.click(function(){
  activeNavItem.removeClass('active');
  $(this).addClass('active');  
});
Run Code Online (Sandbox Code Playgroud)

根据您的上下文,这可能有帮助也可能没有帮助。这是 CodePen 上的一个工作演示:https ://codepen.io/mikejandreau/pen/BbXKZV

在此处输入图片说明