如何在点击时突出显示当前页面?
导航栏
<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
答案 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
中发生了什么,但是您的active
和nav-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