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
发生这种情况的原因是当您单击链接时,您会被重定向到一个新页面。所以通过 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>
我不知道发生了什么JS/master.js,但是您active的nav-item和nav-link.
我想尝试的第一件事是消除类active的nav-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