近期在写一个博客管理后台的前端,涉及在同一页面两种高亮显示当前菜单的需求.记得当年写静态页时,为了实现高亮都是在每个页面加不同的样式,呵.高亮显示我觉得对于web前端来说,是比较常用到的效果,正好此次又要用到,特地整理出我所写的两种高亮类.
其实思路很简单,第一种方法是通过遍历链接组的href值,通过indexOf判断href值是否被包含在浏览器当前url值中.此方法有一定局限,比如对于iframe内的菜单是不能这样判断的; 第二种方法适用范围更广一样,实现思路也比较简单,即通过判断点击,给点击项加载高亮样式.
第一种判断当前URL值高亮类代码:
//@Mr.Think---判断URL实现菜单高亮显示
function highURL(menuId, classCur){
if (!document.getElementById)
return false;
if (!document.getElementById(menuId))
return false;
if (!document.getElementsByTagName)
return false;
var menuId = document.getElementById(menuId);
var links = menuId.getElementsByTagName("a");
for (var i = 0; i < links.length; i++) {
var menuLink = links[i].href;
var currentLink = window.location.href;
if (currentLink.indexOf(menuLink) != -1) {
links[i].className = classCur;
}
}
}
参数说明:
1.menuId : 链接组所在ID;
2.classCur : 高亮显示时的样式class名.
2.classCur : 高亮显示时的样式class名.
调用方法:
window.onload=function highThis(){highURL("youId","youhighclass");}
第二种点击后高亮显示当前类:
//@Mr.Think---点击实现高亮显示
function highOnclick(elemId,classCur) {
if (!document.getElementsByTagName) return false;
if (!document.getElementById) return false;
if (!document.getElementById(elemId)) return false;
var elemId = document.getElementById(elemId);
var links = elemId.getElementsByTagName("a");
for (i = 0; i < links.length; i++) {
links[i].onclick = function() {
for (n = 0; n < links.length; n++) {
links[n].className = "";
this.className = classCur;
this.blur();
}
}
}
}
参数说明:
1.elemId : 链接组所在ID;
2.classCur : 点击后显示的样式class名.
2.classCur : 点击后显示的样式class名.
调用方法:
window.onload=function highThis(){highOnclick("youId","youhighclass");}
此方法扩展性较强,比如可以通过判断parentNode.nodeName值来使某一类型链接不被遍历,等等.
源码下载及演示
鉴于有朋友不知道如何使用,我特地整理了一下我之前写的与这个类有关的页面,给一个DEMO页面和下载地址,需要的朋友可以查看或下载.
点此查看DEMO 点此下载DEMO
think兄,最近才开始关注你的博客,我是从CSS看起来的,你的文章写的相当不错,对于我来说,也有受益。。其实我觉得第二种方式,不适合于路径的跳转。。单纯的只是onclick适合tab切换的高亮。。
但是比如后台那种左侧导航呢,它是跳URL地址,那么可能用第一种方案比较好一点,另外我想说的是其实第一种方式也可能会有问题。。比如当前的location是”www.a.com/”,如果导航写成了”www.a.com”,这两个是不相同的,那么判断==,就有问题了。
[回复]
Mr.Think 回复:
十二月 16th, 2011 at 09:50
@小张, 当面高亮,若涉及跳转,最可靠的方法应是后端语言处理。
[回复]
不好意识怎么用啊
无标题文档
function highOnclick(elemId,classCur) {
if (!document.getElementsByTagName) return false;
if (!document.getElementById) return false;
if (!document.getElementById(elemId)) return false;
var elemId = document.getElementById(elemId);
var links = elemId.getElementsByTagName(“a”);
for (i = 0; i < links.length; i++) {
links[i].onclick = function() {
for (n = 0; n < links.length; n++) {
links[n].className = "";
this.className = classCur;
this.blur();
}
}
}
}
window.onload=function highThis(){highOnclick("m1","liang");}
li{float:left; width:40px;}
.liang li{ background-color:#CCCCCC;}
aaaa
bbb
ccc
[回复]
Mr.Think 回复:
十二月 22nd, 2010 at 19:52
@辉煌, 请参考DEMO演示.
[回复]
第一种只适用于非iframe,方法很好,收着。
第二种只适用于iframe
[回复]
能用在较复杂的多级下拉菜单中吗,比如这一个http://www.cssmenus.co.uk/download/dropdown_one.zip,说实话,对于菜鸟来说这篇文章说的太笼统,技术性太强,没有DEMO可以参考,但我却非常想实现当前菜单高亮的效果,不知能否提供实例或给个参考?不胜感谢哈!!
[回复]
Mr.Think 回复:
五月 17th, 2010 at 22:05
@orange, 已给出实例,请查看文章结尾.
[回复]
orange 回复:
五月 18th, 2010 at 00:14
@Mr.Think, 呃,怎么说呢,哈哈,其实像Think你这样的高手,是没法理解我这样的菜鸟的,说白了我就会套要人家做好的JS效果,或改改CSS样式,可要将不同的导航菜单形式进行变化和修改,那可真有点登天的感觉了,真不在能力范围之内啊。呵呵,别见笑啊,如果你有闲恰好又有兴致的时候,还望能给个稍微具体点的操作方法,这对于菜鸟来说真的很重要,不管怎么说,还是要感谢Think的解决方式,至少这是目前为止我见到的唯一一个管用的效果,很好。
[回复]
Mr.Think 回复:
五月 18th, 2010 at 10:19
@orange, 限于时间,我无法写详细的使用教程.请下载文章中的实例代码,自己花点时间研究一下.这样肯定比你不经过思考的照搬要好.任何知识都是从不会到会.
我也想要这个效果,可是不会用你贴的代码,有例子下载就好了
[回复]
Mr.Think 回复:
五月 16th, 2010 at 19:57
@sunright, 使用方法:比如你的导航菜单id是”i_nav”,你想要高亮显示样式class名为”i_cur”,那么,用你的javascript加载函数加载highOnclick(“i_nav”,”i_cur”);,再给你说明白一点就是:
[回复]
sunright 回复:
五月 20th, 2010 at 16:33
@Mr.Think, 你的DEMO似乎没有用?
[回复]
Mr.Think 回复:
五月 20th, 2010 at 17:42
@sunright, DEMO在ie6+/ff/chrome/opera/safari下亲测过.可能原因是你网速比较慢,还没加载到JS.
试了,没有效果,能否给个完整的例子?
[回复]
Mr.Think 回复:
五月 8th, 2010 at 23:21
@rainight, 你用的是判断URL高亮还是点击高亮.
1.判断URL高亮,如果你菜单链接为空是没有效果的,它是通过比较你点击链接到的地址是否被包含在当前浏览窗口的网址中,实现高亮的;
2.点击高亮可直接调用,一般用于打开框架中的链接时高亮;
3.请确认你的调用和写法是否正确,或在此提交你的代码,我帮你看.
[回复]