Bootstrap 3 导航栏菜单是使用下面的代码定义的。 如果从菜单中选择项目,则会从服务器加载新页面。每个页面都会出现相同的 Bootstrap 菜单。 但是,不用于选择菜单的下拉菜单不会突出显示。
如果允许本地存储,如何强制 bootstrat 自动突出显示最后选择的菜单项:将最后选择的项目存储在本地存储中。如果加载新页面,则获取最后单击的菜单项名称,并通过添加 active
类来突出显示它。
在服务器中执行此操作需要通过动态地将事件类添加到适当的项目来更改生成的菜单。 如果没有这样的改变如何实现呢? 服务器端使用ASP.NET MVC4。也许浏览器中的 jquery+localstorage 或一些简单的 ASP.NET MVC4 解决方案可用。
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li class="dropdown">
<a href='#' class="dropdown-toggle" data-toggle="dropdown">Dropdown 1</a>
<ul class="dropdown-menu" role="menu">
<li><a href='somepage'>Action11</a></li>
<li><a href='somepage'>Action12</a></li>
<li><a href='somepage'>Action13</a></li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown">Dropdown 2</a>
<ul class="dropdown-menu" role="menu">
<li><a href='somepage'>Action121</a></li>
<li><a href='somepage'>Action122</a></li>
<li><a href='somepage'>Action123</a></li>
</ul>
</li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
更新
菜单包含带有查询参数的下拉菜单,如下所示。
在这种情况下,在 Alexander Solonik 的代码中,答案 _str 值始终为 #
并且
urlpath 始终为 DoklSTLG
所以什么都没有突出显示。如何修复?
<nav class="navbar navbar-default navbar-static-top">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav" id="menu">
<li class='dropdown'>
<a href='#' class='dropdown-toggle' data-toggle='dropdown' role='button'>Pad1
</a>
<ul class='dropdown-menu' role='menu'>
<li><a href='/admin/?_user=admin&_company=1'>Bar1</a></li><li><a id='menu_DoklstlG' tabindex='-1' entity='DoklstlG' href='/admin/Grid/Index/DoklstlG?_user=admin&_company=1' title='Ctrl+E'>Option1</a></li>
<li><a id='menu_DoklstlO' tabindex='-1' entity='DoklstlO' href='/admin/Grid/Index/DoklstlO?_user=admin&_company=1'>Ostuarve</a>
...
最佳答案
我遇到了类似的问题并编写了以下脚本:
var _urlpath = $(location).attr('pathname').split('/').pop();
$('#menu > li').each(function(){
var _this = $(this);
var _str = _this.find('a').attr('href');
_str !== _urlpath ? _this.removeClass('active') : _this.addClass('active');
});
这相当简单,过滤 url 路径名,将其存储在变量中,然后最重要的是,当加载新页面时,循环遍历所有 li 并尝试匹配 url 哈希(我不知道准确的术语,抱歉)到 li > a
中的 , 哈希。
可能有更好的方法来做到这一点。
附注您可能需要稍微修改一下代码。
关于jquery - 重新加载页面后如何突出显示导航栏中的事件菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30001919/