工作需要.把菜单单独保存为一个静态文件.页面在载入时读取之.以利于维护...
1.写JSON文件.新建一文本文档.存储格式用UTF-8(GB2312会显示乱码)
- {menumain:
- [{title:"主菜单1",url:"#",className:"icon_myclub",stat:"",
- submenu:[
- {title:"子菜单1",url:"index.aspx"},
- {title:"子菜单2",url:"index.aspx"},
- {title:"子菜单3",url:"index.aspx"}
- ]
- },
- {title:"主菜单2",url:"#",className:"icon_user",stat:"new",
- submenu:[
- {title:"子菜单1",url:"index.aspx"},
- {title:"子菜单2",url:"index.aspx"},
- {title:"子菜单3",url:"index.aspx"}
- ]
- },
- {title:"主菜单3",url:"#",className:"icon_help",stat:"hot",
- submenu:[
- {title:"子菜单1",url:"index.aspx"},
- {title:"子菜单2",url:"index.aspx"},
- {title:"子菜单3",url:"index.aspx"}
- ]
- },
- {title:"主菜单4",url:"#",className:"icon_support",stat:"qiang",
- submenu:[
- {title:"子菜单1",url:"index.aspx"},
- {title:"子菜单2",url:"index.aspx"},
- {title:"子菜单3",url:"index.aspx"}
- ]
- }]
- }
其中.title为主菜单项显示内容.url为主菜单指向(本例中绑定为单击事件).className为菜单项的图标.用CSS设置.stat则为菜单项右侧会有一个 "hot"."new"."强"的图标(也是CSS)
submenu为主菜单相应的子菜单项.title为title.url为URL.
2.写JS.首先包含JQUERY.然后写代码
- <script type="text/javascript">
- var saveMainItem;
- var saveSubItem;
- var tempData;
- //绑定CLASS
- function bindClass(selected)
- {
- $("#nav_node > li").each(function(i) { //遍历菜单
- if(i == selected) //当前单击的按钮
- {
- $(this).addClass("select"); //选定之
- }else
- {
- $(this).removeClass(); //删除样式
- }
- });
- }
- //根据用户点击的按钮来生成子按钮列表
- function initSubMenu(selected)
- {
- $("#submenu").html(""); //清空子菜单各项
- tempSubData = tempData.menumain[selected].submenu; //提取子菜单列表
- for(var i=0 ;i< tempSubData.length ;i++) //遍历节点
- {
- var tempItem = saveSubItem.clone(); //克隆节点
- tempItem.find("a").attr("href",tempSubData[i].url); //设置HREF
- tempItem.find("a").text(tempSubData[i].title); //设置TEXT
- $("#submenu").append(tempItem); //添加到子菜单中
- }
- bindClass(selected);
- }
- //初始化菜单
- function initMenu(selected)
- {
- $("#nav_node").html(""); //清空主菜单各项
- for(var i=0 ;i< tempData.menumain.length ;i++) //遍历节点
- {
- var tempItem = saveMainItem.clone(); //克隆一个节点
- tempItem.find("a").attr("href",tempData.menumain[i].url); //设置HREF
- tempItem.find("a").attr("class",tempData.menumain[i].className); //设置ICON
- tempItem.find("a").html("<span></span>" + tempData.menumain[i].title); //设置标题
- tempItem.find("sup").attr("class",tempData.menumain[i].stat); //设置边上的那个按钮..
- tempItem.find("a").attr("onclick","initSubMenu(" + i + ")" ); //设置单击事件.
- $("#nav_node").append(tempItem); //添加节点
- }
- }
- //绑定数据
- function bind()
- {
- $.ajax({
- type: "get",//使用get方法访问后台
- dataType: "json",//返回json格式的数据
- url: "menu.js",//要访问的后台地址
- data: "",//要发送的数据
- success: function(msg){//msg为返回的数据,在这里做数据绑定
- tempData = msg;
- initMenu(0); //初始化菜单
- initSubMenu(0); //初始化子菜单
- }
- });
- }
- $(document).ready(function() {
- saveSubItem = $("#submenu > li").clone(); //子菜单项
- saveMainItem = $("#nav_node > li").clone(); //主菜单项
- bind();
- });
- </script>
3.HTML的内容为
- <div class="menu_head">
- <ul id="nav_node" class="clear">
- <li><span><a href="#" class=""><span></span></a><sup class=""></sup></span></li>
- </ul>
- <ul class="clear Menuul" id="submenu">
- <li><a href="#"></a></li>
- </ul>
- </div>
4.讲下思路
(1). 页面载入的时候..保存页面的两个节点(父菜单项和子菜单项).以作CLONE用.
(2). 读入JSON数据.然后根据JSON数据来初始化父菜单.
初始化的时候.先清空父菜单.然后进行循环.
.每次循环 : CLONE一个父菜单项.设置父菜单项属性.构造副菜单项单击调用的函数.最后添加到父菜单中.
(3).初始化子菜单项.清空子菜单.然后进行循环.
每次循环 : CLONE一个子菜单项.设置子菜单属性.添加到子菜单中.
(4).设置父菜单项按钮CLASS.
清空所有父菜单项的CLASS.设置当前选定项的CLASS.
5.问题
貌似遗漏了如果父菜单没有子菜单.直接URL转向咋办...其实很简单.在绑定父菜单的时候判断一下URL是否为#.不是#就不初始化ONCLICK属性就可以了...