您的位置: 首页 > 技术文档 > 网页制作 > 不用Cookie的仿刷新二级高亮菜单
混乱的标记语言XHTML2/HTML5 回到列表 在HTML中获取正确的URL属性值
 不用Cookie的仿刷新二级高亮菜单

作者:by0001 时间: 2009-07-29 文档类型:原创 来自:蓝色理想

第 1 页 不用Cookie的仿刷新二级高亮菜单 [1]
第 2 页 不用Cookie的仿刷新二级高亮菜单 [2]

行为层

因为要在行为层中控制菜单的三种状态,所以对于A链接标签,我们就不使用hover伪类来达到菜单的三种动态行为了,我们可以用onmouseover、onmouseout和onclick来模仿伪类的三种行为,这样好便于js的动态调整。并且为了达到行为、样式和结构的三层分离,我们也不用在A标签的html中去加上动态的行为控制代码,这不是一种良好的制作习惯。因此我们需要在页面的加载函数上做点文章,这就需要使用到onload函数,当页面一加载完后就动态绑定a标签的三种行为状态。

在页面一加载完成后,我们首先获取当前的页面url字符串,再根据这个字符串和一二级菜单中的A标签的href地址进行对比,如果存在相同项,则高亮此菜单项的样式。

详细的注释说明我都在下面的函数中一一标注出来,在此就不一一细述了。关键函数代码如下:

    //根据URL地址的参数或字符串高亮当前菜单。
    function hightLightMenu(firstMenuID,twoMenuID){
    var strUrl,strHref,subNavs,strLast,strParentID,strSelfID,
parentID,selfID,strID;
    var Navs=document.getElementById(firstMenuID).getElementsByTagName("a");                        
    // 如果链接没有参数,或者URL链接中不存在我们要获取的参数,则返回数组中的序号
    if(location.href.indexOf("?")==-1){
        strUrl=location.href.substring(location.href.lastIndexOf("/")+1);//取得URL页面名称            
        //一级菜单高亮                    
        for (var i = 0; i < Navs.length; i++) {            
            //在IE6,IE7中strHref获得的是全路径,而在IE8和ff中获得的是页面名称,为了兼容,需要将它的字符串进行拆分
            strHref=Navs[i].getAttribute("href").substring(Navs[i].getAttribute("href").lastIndexOf('/')+1);                    
            if(strUrl==strHref){
                //高亮当前菜单项                        
                addClass(Navs[i],"cur");            
            }
            else{//如果是其它项,则绑定鼠标两态事件                            
                (function(i){
                    var obj=Navs[i];              
                    addEventHandler(obj,"mouseover",function(){overMe(obj)});
                    addEventHandler(obj,"mouseout",function(){outme(obj)});
                })(i)                             
            }                    
        }        
        //二级菜单高亮
        if (document.getElementById(twoMenuID) != null) {//判断是否存在二级菜单    
            //有可能二级菜单不存在,如首页只有一级菜单,所以当菜单id存在时,则...            
            subNavs = document.getElementById("othermenu").getElementsByTagName('a');
            for (var n = 0; n < subNavs.length; n++) {
                hightlight(subNavs,n,0);//默认高亮第一个菜单项                
            }
        }
    }
    else{
        //如果url中带有参数的页面,则...            
        strLast = location.href.substring(location.href.indexOf("?")+1);    
        strParentID=strLast.substring(0,strLast.indexOf("&"));
        strSelfID=strLast.substring(strLast.indexOf("&")+1);    
        parentID=strParentID.substring(strParentID.indexOf("=")+1);//获得第一个参数,这是一级菜单的id
        selfID=strSelfID.substring(strSelfID.indexOf("=")+1);//获得第二个参数,这是二级菜单的id   
        
        //一级菜单高亮    
        for (var i = 0; i < Navs.length; i++) {
            hightlight(Navs,i,parentID);
        }
        //二级菜单高亮
        if (document.getElementById(twoMenuID) != null) {//判断是否存在二级菜单            
            subNavs = document.getElementById(twoMenuID).getElementsByTagName('a');
            for (var n = 0; n < subNavs.length; n++) {
                strID=selfID - 1;                
                hightlight(subNavs,n,strID);                
            }
        }
    }        
    }
    //高亮函数
    function hightlight(elementArray,inumber,curMenuIndex){
    if (inumber == curMenuIndex) {        
        addClass(elementArray[inumber],"cur");//高亮当前菜单样式
    }
    else {
        (function(inumber){
            var obj = elementArray[inumber];
            addEventHandler(obj, "mouseover", function(){overMe(obj)});//增加鼠标移上去时的事件
            addEventHandler(obj, "mouseout", function(){outme(obj)});//增加鼠标移走时的事件
        })(inumber)
    }    
    }

经过如上一番设置,一个通用、兼容的高亮函数就诞生了,我们看看它的效果截图:

本案例的高亮函数在如下浏览器中测试通过:

IE5.5,IE6,IE7,IE8,FF3,TT,Maxthon,Chrome,Safari4.0,opera

因为子页面较多,请下载本案例打包文件到本地测试:下载Demo

原文:http://www.cnblogs.com/binyong/archive/2009/07/27/1531441.html

经典论坛交流
http://bbs.blueidea.com/thread-2941335-1-1.html

本文链接:http://www.blueidea.com/tech/web/2009/6915.asp 

出处:蓝色理想
责任编辑:bluehearts

上一页 不用Cookie的仿刷新二级高亮菜单 [1] 下一页

◎进入论坛网页制作WEB标准化版块参加讨论,我还想发表评论

相关文章
浏览器 cookie 限制
使用Flash读取COOKIE
作者文章 更多作者文章
无hack并支持透明圆角框九宫格
九宫格应用案例:极酷网页播放器
三层分离的完美九宫格
牢不可破的九宫格布局
九宫格基本布局
关键字搜索 常规搜索 推荐文档
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
周大福“敬•自然”设计大赛开启
国际体验设计大会7月将在京举行
中国国防科技信息中心标志征集
云计算如何让安全问题可控
云计算是多数企业唯一拥抱互联网的机会
阿里行云
云手机年终巨献,送礼标配299起
阿里巴巴CTO王坚的"云和互联网观"
1499元买真八核 云OS双蛋大促
首届COCO桌面手机主题设计大赛
栏目最新 栏目最新列表
浅谈JavaScript编程语言的编码规范
如何在illustrator中绘制台历
Ps简单绘制一个可爱的铅笔图标
数据同步算法研究
用ps作简单的作品展示页面
CSS定位机制之一:普通流
25个最佳最闪亮的Eclipse开发项目
Illustrator中制作针线缝制文字效果
Photoshop制作印刷凹凸字体
VS2010中创建自定义SQL Rule
>> 分页 首页 前页 后页 尾页 页次:2/21个记录/页 转到 页 共2个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
网站可用性测试及优化指南
《写给大家看的色彩书1》
《跟我去香港》
众妙之门—网站UI 设计之道
《Flex 4.0 RIA开发宝典》
《赢在设计》
犀利开发—jQuery内核详解与实践
作品集 更多内容

杂⑦杂⑧ Gold NORMANA V2