首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

简单实现当前菜单导航高亮的js代码

要实现当前菜单导航高亮的效果,可以通过JavaScript来动态地添加一个CSS类,以突出显示当前页面所对应的菜单项。以下是一个简单的实现示例:

HTML结构

代码语言:txt
复制
<ul class="nav">
  <li><a href="/home">首页</a></li>
  <li><a href="/about">关于我们</a></li>
  <li><a href="/services">服务</a></li>
  <li><a href="/contact">联系我们</a></li>
</ul>

CSS样式

代码语言:txt
复制
.nav li.active a {
  color: red; /* 或者其他高亮的样式 */
}

JavaScript代码

代码语言:txt
复制
document.addEventListener('DOMContentLoaded', function() {
  // 获取所有的导航链接
  var navLinks = document.querySelectorAll('.nav a');

  // 遍历每个链接
  navLinks.forEach(function(link) {
    // 检查当前链接的href属性是否与当前URL匹配
    if (link.getAttribute('href') === window.location.pathname) {
      // 如果匹配,给对应的li元素添加active类
      link.parentNode.classList.add('active');
    }
  });
});

解释

  1. HTML结构:创建一个包含导航链接的无序列表。
  2. CSS样式:定义一个.active类,用于设置高亮样式。
  3. JavaScript代码
    • 使用DOMContentLoaded事件确保DOM完全加载后再执行脚本。
    • 获取所有的导航链接。
    • 遍历每个链接,检查其href属性是否与当前页面的路径(window.location.pathname)匹配。
    • 如果匹配,则给该链接的父元素(即<li>)添加active类。

应用场景

  • 单页应用(SPA):在单页应用中,页面不会完全刷新,但可以通过JavaScript动态更新URL和菜单高亮。
  • 多页网站:在传统的多页网站中,每次页面加载时都可以通过上述脚本自动设置高亮。

优势

  • 用户体验:用户可以清晰地看到当前所在页面的位置。
  • 代码简洁:实现简单,易于维护。

可能遇到的问题及解决方法

  • 动态路由问题:如果页面使用了动态路由(如/user/:id),直接比较href可能不准确。可以通过正则表达式或更复杂的路径匹配逻辑来解决。
  • 性能问题:对于大型导航菜单,遍历所有链接可能会影响性能。可以通过优化选择器或使用更高效的数据结构来改善。

通过上述方法,可以有效地实现菜单导航的高亮效果,提升用户体验。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

项目实践,实现一个简单前端js树状竖型风格导航菜单

在项目开发过程中,有时候会遇到一些需要开发人员实现的一些js效果,大公司会有专业的前端设计人员设计界面,而小公司可能就需要后端开发工程师自己来实现,下面是一个我用过的一个js树状竖型风格导航菜单代码。...2.熟练使用SQL语法及mysql或oracle、sql server数据库应用开发; 3.熟练运用 js、html、css 等前端开发技术; 4.熟悉tomcat、jetty等服务器软件; 5.良好的工作态度...映射文件没有要求用户运行jQuery的,它只是提高了开发人员的调试经验。 先看效果: ? 下面的代码可以直接复制出来,运行看效果,再根据项目实际情况做相应的修改。 实例代码: 导航菜单特效...--nav--> 这是一个简单前端代码实例,注意要自己下载jquery引入项目,代码仅供参考。

2K10

使用 prettify.js 实现网站代码高亮

作为前端开发者,代码是你躲也躲不开的,下面就教你如何在自己的网站里给所有代码块添加高亮效果。而这篇文章要给你介绍的就是这样一个代码高亮插件 prettify.js 。...这个插件的作用方法也非常简单,你只需要引用相关文件,然后再启用它就可以。 的,这里没有唯一的标准。 在这里由于启用 prettify.js 时,用到了jQuery 所以你也需要把 jQuery 一同引进来。..."); prettyPrint();} ) 这行代码的意思就是启用 prettify.js ,其实就是给标签添加 class 类 prettyprint 和 linenums...prettyprint :标记作用范围 linenums:是否显示行号 启用完之后,你就可以在你的写文章的时候,用 标签 把代码包裹起来就可以看到美美的高亮效果了 有时候你会遇到一些奇葩的问题

2.8K30
  • 使用 Prism.js 实现漂亮的代码语法高亮

    给大家推荐一个代码高亮显示的东东,直接使用一个 JavaScript 库 —— Prism 是一款轻量、可扩展的代码语法高亮库,使用现代化的 Web 标准构建。 为什么选择 Prism.js ?...天生伶俐语言的 CSS 类是可继承的,所以你只需定义一次就能应用到多个代码片段。轻如鸿毛代码压缩后只有 1.6KB。每添加一个语言平均增加 0.3-0.5KB,主题在 1KB 左右。...快如闪电如果可能,支持通过 Web Workers 实现并行。轻松扩展定义新语言或扩展现有语法,或者新增功能都非常简单。...js"> 遵循 HTML5 标准,Prism 使用语义化的 元素和 元素来标记代码区块:...原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:使用 Prism.js 实现漂亮的代码语法高亮

    4.4K30

    利用Prism.js脚本工具实现网页代码高亮效果

    如果我们是站长相关的网站博客,如果需要引用一些脚本代码的时候一般看到的都是代码高亮效果,这样的用户体验更好一些。...我们要实现代码高亮的方法有很多中,比如WordPress也有代码高亮插件或者是手动实现CSS样式来实现代码高亮。在这篇文章中老蒋要分享的是Prism.js小工具可以实现页面的代码高亮效果。...Prism.js,是一款轻量的可以定制的代码插件效果工具。我们可以使用Prismjs 可以快速为网站添加代码高亮功能。...Prism.js 脚本可以自定义下载,支持超过 100 多种编程语言,还支持很多种插件,这个就不仅仅局限适合哪个CMS,所有的网站页面都可以使用只要我们引用对应的JS文件。...第三、如何使用 案例效果:https://prismjs.com/examples.html 本文出处:老蒋部落 » 利用Prism.js脚本工具实现网页代码高亮效果 | 欢迎分享

    6.4K20

    最简单的纯js实现点击展开二级菜单功能

    我最近就遇到做个点击展开二级菜单的要求,当然只能用原生的JS去写来实现,我借鉴了网上的一个案例,补充一下,分享一下: 如果,默认打开页面进来时二级菜单是隐藏的,需要点击才能展现二级菜单,再点击就是隐藏二级菜单...这里有两个点,实现展现和隐藏用display=”block“和display=”none”,另外就是要做一个判断,if else的判断当前是block还是none。 <!...2 二级菜单2 二级菜单2 二级菜单2 二级菜单2...sub_menu.style.display = "block"; } 有个注意事项就是一级菜单的...如果,你的页面默认进来二级菜单是展现的,点击时才关闭。直接把style标签的样式display=”none”去掉就可以。同时需要修改一下js。

    4.3K20

    怎么简单实现菜单拖拽排序的功能

    它是RecyclerView对于item交互处理的一个「辅助类」,主要用于拖拽以及滑动处理。以接口实现的方式,达到配置简单、逻辑解耦、职责分明的效果,并且支持所有的布局方式。...3、功能拆解4、功能实现4.1、实现接口自定义一个类,实现ItemTouchHelper.Callback接口,然后在实现方法中根据需求简单配置即可。...4.2、绑定RecyclerView上面接口实现部分我们已经简单写好了,逻辑也挺简单,总共不超过100行代码。...至此,简单的效果就已经实现了。下面开始优化和进阶的部分。...4.4、选中放大/背景变色为了提升用户体验,可以在拖拽的时候告诉用户当前拖拽的是哪个item,比如选中的item放大、背景高亮等。

    1.1K30

    Vue3(Vite) 通过 prism.js 实现代码高亮并实现Mac风格

    prismjs漂亮的代码语法高亮插件 极致易用:引用 prism.css 和 prism.js,使用合适的 HTML5 标签(code.language-xxxx),搞定!...天生伶俐:语言的 CSS 类是可继承的,所以你只需定义一次就能应用到多个代码片段。 轻如鸿毛:代码压缩后只有 1.6KB。每添加一个语言平均增加 0.3-0.5KB,主题在 1KB 左右。...快如闪电:如果可能,支持通过 Web Workers 实现并行。 轻松扩展:定义新语言或扩展现有语法,或者新增功能都非常简单。...onUpdated(() => { Prism.highlightAll(); //修改内容后重新渲染 }); onMounted(() => { Prism.highlightAll(); //切换菜单重新渲染...}) Mac风格 通过修改全局pre的样式完成(可以在公告样式中写) 问题:这里虽然完成了效果,但是感觉代码不太理想 通过before 和after 选择器之后还差一个点,就在选择了

    2.6K60

    JS实现简单的Vue

    vue的使用相信大家都很熟练了,使用起来简单。但是大部分人不知道其内部的原理是怎么样的,今天我们就来一起实现一个简单的vue。...Object.defineProperty() 实现之前我们得先看一下Object.defineProperty的实现,因为vue主要是通过数据劫持来实现的,通过get、set来完成数据的读取和更新。...$el);                 })             }         }     }              这里代码比较多,我们拆分看你就会觉得很简单了 首先我们先遍历el元素下面的所有子节点...只需要把当前需要订阅的数据push到watcherTask里面,然后到时候在设置值的时候就可以批量更新了,实现双向数据绑定,也就是下面的操作 that.watcherTask[key].forEach(...完整代码 地址:https://github.com/wclimb/MyVue 参考 1、剖析Vue原理&实现双向绑定MVVM 2、仿Vue实现极简双向绑定 来源:wclimb 链接:https:/

    2.5K20
    领券