在项目开发过程中,遇到一个问题

在一个模板页面中,Layout.cshtml,页面左边放了一个菜单项menu,每一项都是一个链接到一个新的页面。但所有页面都是用这个模板Layout.cshtml。需要当你点击到menu上某一项时,该项应用css class "selected"高亮显示。

Layout.cshtml代码如下:

<div class="sidebar-wrap">
<ul class="sidebar-ul" id="ProductNav"> <li>
<a class="selected" href="/product1">product1</a>
</li>
<li>
<a href="/product2">product2</a>
</li>
<li>
<a href="/product3">product3</a>
</li>
<li>
<a href="/product4">product4</a>
</li>
<li>
<a href="/product5">product5</a>
</li>
<li>
<a href="/product6">product6</a>
</li> </ul>
</div>

刚开始,我写了一个JavaScript脚本,如下:

<div class="sidebar-wrap">
<ul class="sidebar-ul" id="ProductNav"> <li>
<a class="selected" href="/product1">product1</a>
</li>
<li>
<a href="/product2">product2</a>
</li>
<li>
<a href="/product3">product3</a>
</li>
<li>
<a href="/product4">product4</a>
</li>
<li>
<a href="/product5">product5</a>
</li>
<li>
<a href="/product6">product6</a>
</li> </ul>
</div> <script type="text/javascript" src="/scripts/jquery.min.js"></script>
<script type='text/javascript'>
$(document).ready(function(){ $('#ProductNav li a').click(function(){ $('#ProductNav li a.selected').removeClass('selected');
$(this).addClass('selected');
});
});
</script>

发现并不起作用,点击时,又回到原来的那个product1高亮显示。

原因很简单,因为每一次点击,比如点击product2,它就会进入一个新的页面product2,会重新加载一次Layout.cshtml,而这个javascript是在product1页面执行的,你点击product2,重新加载Layout.cshtml, 还是上面的代码,product1为selected

那么如何实现呢。弄了好久,终于发现一个简便的办法。当从product1页面,点击product2时,用window.location.pathname获取"/product2",从中取出product2. 然后在menu中的每个链接<a>中加上class,class名就是这个名(比如product2).

这样去匹配,匹配上的,就说明是当前页面,就加上css "selected"

具体如下

<div class="sidebar-wrap">
<ul class="sidebar-ul" id="ProductNav"> <li>
<a class="product1" href="/product1">product1</a>
</li>
<li>
<a class="product2" href="/product2">product2</a>
</li>
<li>
<a class="product3" href="/product3">product3</a>
</li>
<li>
<a class="product4" href="/product4">product4</a>
</li>
<li>
<a class="product5" href="/product5">product5</a>
</li>
<li>
<a class="product6" href="/product6">product6</a>
</li> </ul>
</div>

新的JavaScript如下

<script type="text/javascript" src="/scripts/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var path = window.location.pathname;
path = path.replace('/', '');
$("." + path).addClass('selected'); }); </script>

如此,就大功告成了.

Javascript实现页面左边的菜单选中项高亮显示的更多相关文章

  1. JavaScript网站设计实践(二)实现导航栏当前所选页面的菜单项高亮显示

    一.(一)中的代码还可以修改的地方. 在(一)中,如果是运行在服务器下,如apache等,可以把head和navigation的div抽取出来,放置在另一个html文件里,然后在页面中,include ...

  2. MVC中导航菜单,选中项的高亮问题。

      这个菜单是放在母板页的.比如当前选中的是异常业务监控.如果页面刷新了.就会变成第一张图..选择其他的选项也会,因为页面会刷新嘛.. 怎么处理这个问题了? 答案是记录当前页面的url. 有两种解决思 ...

  3. MVC中导航菜单,选中项的高亮问题。。

    先上图:             这个菜单是放在母板页的.比如当前选中的是异常业务监控.如果页面刷新了.就会变成第一张图..选择其他的选项也会,因为页面会刷新嘛.. 怎么处理这个问题了? 答案是记录当 ...

  4. 使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态。点击列表的项,切换二级列表的显示或隐藏状态

    查看本章节 查看作业目录 需求说明: 使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态.点击列表的项,切 ...

  5. 用JavaScript获取页面上被选中的文字的技巧

    这里介绍的一个小技巧是如何用JavaScript获取页面上被选中的文字的方法.最关键的JavaScript API是: event.selection = window.getSelection(); ...

  6. wpf datagrid设置右键菜单打开时选中项的背景色

    原文:wpf datagrid设置右键菜单打开时选中项的背景色 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangli321456/artic ...

  7. 刷新各ifream当前页,下拉项改变触发事件js,给选中项加背景色js

    <script type="text/javascript" language="javascript"> //刷新框架各页面 function r ...

  8. jquery操作select下拉框的各种方法,获取选中项的值或文本,根据指定的值或文本选中select的option项等

    简介jquery里对select进行各种操作的方法,如联动.取值.根据值或文本来选中指定的select下拉框指定的option选项,读取select选中项的值和文本等. 这一章,站长总结一下jquer ...

  9. ASP.NET Core Blazor 用Inspinia静态页模板搭建简易后台(实现菜单选中)

    Blazor 是一个用于使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建丰富的交互式 UI. 共享使用 .NET 编写的服务器端和客户端应用逻辑 ...

随机推荐

  1. jvm堆查看

    jps查看jvm的进程号 jmap -histo:live [进程号] >log.txt dump jvm堆.

  2. wepy/packages/wepy-web/src/helper/device.js

    wepy/packages/wepy-web/src/helper/device.js https://github.com/Tencent/wepy/blob/bd0003dca2bfb958113 ...

  3. SAP FI 科目代码

    资产类 现金 银行存款 其他货币资金 短期投资 短期投资跌价准备 应收票据 应收股利 应收利息 应收账款 其他应收款 坏账准备 预付账款 应收补贴款 物料采购 原材料 包装物 低值易耗品 材料成本差异 ...

  4. 【docker】学习笔记一:制作自己的centos6.9镜像

    前言: 最近开始研究docker,在这里做一个记录. 本来开始想用centos7系列做镜像,毕竟是最新版本的centos,但是centos7有一个严重的bug,就是正常启动的镜像不能使用systemc ...

  5. mongoDB多级子文档查询

    db.getCollection('product').find({'coverage':{'$elemMatch':{'plan':{'$elemMatch':{'iscoverage':{'$in ...

  6. 登录令牌 Token 介绍

     Token值介绍 token 值: 登录令牌.利用 token 值来判断用户的登录状态.类似于 MD5 加密之后的长字符串. 用户登录成功之后,在后端(服务器端)会根据用户信息生成一个唯一的值.这个 ...

  7. vue 的基本语法

    一 . Vue 的介绍 1 . 前端的三大框架 (可以去 GitHub 查看三个框架的 star 星) vue   :  作者尤雨溪, 渐进式的JavaScript 框架 react :  Faceb ...

  8. A Pangram

    Codeforces Round #295 div2 的A题,题意是判读一个字符串是不是全字母句,也就是这个字符串是否包含了26个字母,无论大小写. Sample test(s) input 12 t ...

  9. 验证控件 .net

    检查Page.IsValid   if (typeof (Page_ClientValidate) == 'function') {                Page_ClientValidat ...

  10. 解决使用mybatis做批量操作时发生的异常:Parameter '__frch_item_0' not found. Available parameters are [list] 记录

    本文主要描述 使用mybatis进行批量更新.批量插入 过程中遇到的异常及总结: 首先贴出使用批量操作报的异常信息: java.lang.RuntimeException: org.mybatis.s ...