如何在jQuery中单击每个链接时更改活动类
How to change active class at each link click in jQuery?
我有一个MVC应用程序,在_Layout.cshtml文件中我有这样的东西:
<div class="collapse navbar-collapse">
<ul class="nav pull-right navbar-nav">
<li id="home" class="active"><a id="homeLink" href='@Url.Action("Index", "Home")'>Home</a></li>
<li id="about"><a id="aboutLink" href='@Url.Action("About", "Home")'>About Us</a></li>
<li><a href='@Url.Action("Services", "Home")'>Services</a></li>
<li><a href=''>Blog</a></li>
<li><a href='@Url.Action("Contact", "Home")'>Contact</a></li>
</ul>
</div>
所以关键是当网站启动时,第一个链接设置为活动,然后在每个链接单击后,我想将该链接的类设置为活动。我想我需要写一些jQuery代码,但我似乎无法找出答案。
更新:
<ul class="nav pull-right navbar-nav">
<li id="Home" class="active"><a href='@Url.Action("Index", "Home")'>Home</a></li>
<li id="About"><a href='@Url.Action("About", "Home")'>About Us</a></li>
<li id="Services"><a href='@Url.Action("Services", "Home")'>Services</a></li>
<li id="Blog"><a href=''>Blog</a></li>
<li id="Contact"><a href='@Url.Action("Contact", "Home")'>Contact</a></li>
</ul>
主.js
$(function () {
$('a').click(function () {
$(this).closest('ul').find('li').removeClass('active');
$('#' + '@ViewBag.Title').addClass('active');
});
});
示例视图:
@{
ViewBag.Title = "Services";
}
@{
ViewBag.Title = "Contact";
}
以下脚本将添加active
类
$('a').click(function(e) {
// uncomment the following line to prove it
// e.preventDefault();
$(this).closest('ul').find('li').removeClass('active');
$(this).closest('li').addClass('active');
})
但是,由于您单击了链接,您甚至看不到它,因为您立即使用相同的布局重定向到另一个页面,其中 active
类应用于第一个 li
元素(新视图不知道您在此页面上执行了什么)。
由于您似乎想要突出显示与当前页面相关的li
元素,因此一种选择是为您的li
元素提供一个与 ViewBag.Title
属性匹配的 id
属性,并使用它来应用类。
<div class="collapse navbar-collapse">
<ul class="nav pull-right navbar-nav">
<li id="home">@Html.ActionLink("Home", "Index", "Home")</li>
<li id="about">@Html.ActionLink("About Us", "About", "Home")</li>
<li id="services">@Html.ActionLink("Services", "Services", "Home")</li>
....
</ul>
</div>
和脚本
$('#' + '@ViewBag.Title').addClass('active');
然后在Index.cshtml
视图中,
@{
ViewBag.Title = "Home"; // or "About" for About.cshtml, "Services" for Services.cshtl etc.
Layout = "~/Views/Shared_Layout.cshtml";
}
假设您没有做任何事情来改变链接的触发方式(使用 ajax 加载内容),您可以将链接的 href 与当前 url 进行比较,以确定哪个应该处于活动状态。
$('.navbar-nav ul').children().each(function() {
var link = $(this).find('a'); // or var link = $(this).children('a');
if (link.attr('href') == location.href) {
$(link).addClass('active');
return false;
}
});
您所需要的只是确保链接 href 的格式与它在 url 中的显示方式相同(相对与绝对)。
相关文章:
- 单击我网站中的链接时打开新选项卡,保持当前选项卡处于活动状态
- 如何获取链接以保持活动状态
- UL 手风琴中的活动非活动链接
- 在JavaScript / jQuery中用活动超链接替换粘贴的链接
- 在页面加载时创建/设置活动的默认链接,但在单击其他链接时删除活动链接
- 活动链接未更改颜色
- 如何根据活动锚点自动将类添加到链接中
- 活动页面链接图标颜色
- 带有链接的jquery选项卡会记住最后一个活动项
- 如何在页面刷新时保持选定/活动的HTML链接颜色
- 当子菜单的父级或包含链接处于活动状态时,如何告知子菜单可见
- 如何将活动状态类动态更改(添加)到导航链接
- 滚动到活动链接 jQuery
- 滚动并聚焦到导航栏中的活动链接
- 如何在 jQuery 中为链接我的“活动”滚动菜单创建例外
- 获取左侧导航链接以保持打开和活动状态
- 打开打印窗口处于活动状态的 PDF 链接
- 设置活动链接(不带 ul 列表)
- 将 css 按钮更改为没有链接的 css 活动
- 需要JS保持悬停链接活动