我是一名新的ASP.NET Web Forms开发人员,并尝试将Twitter Bootstrap与主页一起使用。当用户选择导航栏项时,我正在努力将其设置为活动状态。我按照this tutorial创建了我的简单母版页,关于如何在ASP.NET中使用Twitter Bootstrap。
这是我母版页的代码:
<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<link href="css/bootstrap.css" rel="stylesheet" type="text/css" />
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<div class="container">
<div class="row-fluid">
<div class="span12">
<div class="page-header">
<h1>Hello... My First Website with Twitter Bootstrap</h1>
</div>
</div>
</div>
<div class="row-fluid">
<div class="span3">
<ul class="nav nav-list">
<li class="nav-header">Navigation</li>
<li class="active"><a href="Default.aspx">ASP.NET</a></li>
<li><a href="Default2.aspx">Java</a></li>
<li><a href="#">VB.Net</a></li>
<li><a href="#">C#</a></li>
</ul>
</div>
<div class="span9">
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</div>
</div>
</div>
</form>
</body>
</html>
然后,我将此脚本添加到 the Head 以修复菜单问题:
<script type="text/javascript">
$(document).ready(function () {
var url = window.location.pathname;
var substr = url.split('/');
var urlaspx = substr[substr.length - 1];
$('.nav').find('.active').removeClass('active');
$('.nav li a').each(function () {
if (this.href.indexOf(urlaspx) >= 0) {
$(this).parent().addClass('active');
}
});
});
</script>
然而,一切都没有改变。当我从导航栏中选择任何项目时,活动类尚未添加到新选择的项目中,我不知道原因。 你能否帮我解决这个问题。
答案 0 :(得分:23)
使用此:
<div class="navbar">
<div class="navbar-inner">
<div class="container">
<ul class="nav">
<li class="active"><a href="/Default.aspx">Default</a></li>
<li><a href="/Clients.aspx">Clients</a></li>
<li><a href="/_display/">Display</a></li>
</ul>
</div>
</div>
</div>
$(document).ready(function () {
var url = window.location;
$('.navbar .nav').find('.active').removeClass('active');
$('.navbar .nav li a').each(function () {
if (this.href == url) {
$(this).parent().addClass('active');
}
});
});
示例:http://jsfiddle.net/yUdZx/3/
并且,在“href”中使用“Page.ResolveUrl”
<a href="<%= Page.ResolveUrl("~/Clients.aspx") %>">Clients</a>
最好......
答案 1 :(得分:4)
实际上雷纳尔多,几乎拥有它...... 至少对我而言,根据他的例子,这对于激活当前选项和取消前一个选项是非常好的。
$(document).ready(function() {
var url = window.location;
$('ul.nav li a').each(function () {
if (this.href == url) {
$("ul.nav li").each(function () {
if ($(this).hasClass("active")) {
$(this).removeClass("active");
}
});
$(this).parent().addClass('active');
}
});
});
答案 2 :(得分:1)
我已将其放在每个内容页面中,更改每个页面的导航项的ID(这使用JQuery选择器)。因此,为此,您需要为列表项目提供ID。我没有将“活动”类添加到母版页,因为我们需要做的就是在加载内容时突出显示相应的类。
<script language="javascript" type="text/javascript">
$(document).ready(function () {
$("[id$=yourNavItemId]").addClass("active");
});
</script>
注意:如果您在导航栏中使用ASP.NET控件而不是列表项,那么它们可能会在运行时加上前缀,导致您的javascript无法找到您认为自己正在寻找的ID。
答案 3 :(得分:1)
以下代码可以使用:
$(document).ready(function () {
$('.navbar .nav').find('.active').removeClass('active');
var url = window.location.toString();
var u = url.substring(0, url.lastIndexOf("/")).toString();
$('.navbar .nav li a').each(function () {
var hr = this.href.substring(0, this.href.lastIndexOf('/')).toString();
if ((u == hr) || (u.indexOf(hr) > -1))
{
$(this).parent().addClass('active');
return false;
}
});
// Deactivation to manually add items you have with href = "#" example:
$('#liSalir').removeClass('active');
});
答案 4 :(得分:0)
如果您使用带下拉菜单的导航栏,则将以下脚本放在母版页的末尾(在正文结束标记之前) :
<script type="text/javascript">
$(document).ready(function () {
var url = window.location;
$('ul.nav li a').each(function () {
if (this.href == url) {
$("ul.nav li").each(function () {
if ($(this).hasClass("active")) {
$(this).removeClass("active");
}
});
$(this).parent().parent().parent().addClass('active');
}
});
});
</script>
这完全适合我。
答案 5 :(得分:0)
我知道这篇文章很旧但是使用
$(document).ready(function () {
var url = window.location;
$('ul.nav li a').each(function () {
if (this.href == url) {
$("ul.nav li").each(function () {
if ($(this).hasClass("active")) {
$(this).removeClass("active");
}
});
$(this).parents().addClass('active');
}
});
});
因为你也想活跃所有的父母。
答案 6 :(得分:0)
var windowUrl = window.location.href.toLowerCase();
//var windowUrl = window.location.href.toLowerCase().split('.')[0];
setTimeout(function () {
var windowUrl = window.location.href.toLowerCase();
$('#nav li').removeClass('active');
$('#nav li').each(function (index) {
pageUrl = $(this).find('a').attr('href');
if (windowUrl.indexOf(pageUrl) > -1) {
$(this).addClass('active');
}
});
}, 10);
答案 7 :(得分:0)
我已经创建了一个完整填写您需要的示例,您需要根据需要修改代码。 在母版页上使用此jquery
<script type="text/javascript">
$(function () {
$('[id*=submenu]').addClass('sub-menu open');
$('[id*=Master_Pages]').attr("aria-expanded", true);
$('.subMenus').click(function () {
localStorage.setItem('lastTab', $(this).attr('id'));
});
});
function pageLoad() {
var isActiveLink = false;
$.each($('.subMenus'), function () {
if ($(this).attr('id') == localStorage.getItem('lastTab')) {
$(this).closest('li').addClass('active');
localStorage.removeItem('lastTab');
isActiveLink = true;
}
else {
$(this).closest('li').removeClass('active');
}
});
if (!isActiveLink) {
$('[id*=Master_Designation]').closest('li').addClass('active');
}
}
</script>
答案 8 :(得分:0)
对于那些喜欢服务器端实现的人来说,请将您感兴趣的 li 标记转换为Master.Page文件上的 runat =“ server” 。有问题的代码将类似于以下内容:
<div class="collapse navbar-collapse" id="menu">
<ul class="nav navbar-nav ml-auto">
<li class="nav-item" runat="server" id="tabHome" >
<a class="nav-link" href="/">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item" runat="server" id="tabContact">
<a class="nav-link" href="/Contact">Contact</a>
</li>
<li class="nav-item">
<a class="nav-link" runat="server">Hello, <asp:LoginName runat="server" />
</a>
</li>
</ul>
</div>
然后在“母版页”后面的代码中-Site.Master.vb或Site.Master.cs,具体取决于所使用的语言-在“页面加载”事件中添加以下内容:
VB.Net实现:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Dim thisURL As String = Request.Url.Segments(Request.Url.Segments.Count - 1)
Select Case thisURL
Case "Default", "default.aspx"
tabContact.Attributes.Remove("active")
tabHome.Attributes.Add("class", "active")
Case "Contact"
tabHome.Attributes.Remove("active")
tabContact.Attributes.Add("class", "active")
End Select
End Sub
C#实现:
Protected void Page_Load(Object sender, EventArgs e)
{
String thisURL =
Request.Url.Segments(Request.Url.Segments.Count - 1);
switch (thisURL)
{
Case "Default":
Case "default.aspx":
{
tabContact.Attributes.Remove("active");
tabHome.Attributes.Add("class", "active");
break;
}
Case "Contact" :
{
tabHome.Attributes.Remove("active");
tabContact.Attributes.Add("class", "active");
break;
}
}
}
由于应该最初打开的页面是“ Default.aspx”,因此,一旦用户进入网站,“主页”菜单项将突出显示。下面显示一个示例:
为简单起见,示例中仅使用了两个导航栏项,但是如果需要更多的逻辑项,则可以实现相同的逻辑。
希望能对您有所帮助。