js控制json生成菜单——自制菜单(一)

此文档解决以下问题:

1.JSON文件的书写方式

2.jQuery.getJSON()的运用

3.jQuery.each()的运用

4.jQuery的DOM 操作方法之一:.append()的运用

5.jQuery的遍历方法之一:.children()的运用

6.jQuery的遍历方法之一:.siblings()的运用

7.jQuery的绑定事件处理器之一:.on()的运用

8.jQuery的滑动特效:.slideToggle()、.slideUp()、.slideDown()的运用



最终效果:

  

1.navtab.html

 1 <!DOCTYPE html>
 2 <html>
 3
 4     <head>
 5         <meta charset="UTF-8">
 6         <title>利用jq和json生成菜单</title>
 7         <link type="text/css" rel="stylesheet" href="css/navtab.css" />
 8         <script src="js/jquery_3.3.1_jquery.min.js"></script>
 9         <script src="js/navtab.js"></script>
10     </head>
11
12     <body>
13
14         <div id="nav_box">
15             <ul id="nav-mainbox">
16                 <li class="nav_head">
17                     <span class="shead"><img src="img/nav/home.png"/></span>
18                     <a href="#">首页</a>
19                     <span class="sfoot"><img src=""/></span>
20                 </li>
21             </ul>
22         </div>
23
24     </body>
25
26 </html>

2.nav.json

[
	{
		"navId": 1,
		"navTitle": "一级菜单1",
		"navParentId": 0
	}, {
		"navId": 2,
		"navTitle": "一级菜单2",
		"navParentId": 0
	}, {
		"navId": 3,
		"navTitle": "一级菜单1子1",
		"navParentId": 1
	}, {
		"navId": 4,
		"navTitle": "一级菜单1子2",
		"navParentId": 1
	}, {
		"navId": 5,
		"navTitle": "一级菜单3",
		"navParentId": 0
	}, {
		"navId": 6,
		"navTitle": "一级菜单2子1",
		"navParentId": 2
	}, {
		"navId": 7,
		"navTitle": "一级菜单3子1",
		"navParentId": 5
	}, {
		"navId": 8,
		"navTitle": "一级菜单2子2",
		"navParentId": 2
	}, {
		"navId": 9,
		"navTitle": "一级菜单4",
		"navParentId": 0
	}, {
		"navId": 10,
		"navTitle": "一级菜单4子1",
		"navParentId": 9
	}

3.navtab.js

 1 $(function() {
 2     $.getJSON("json/nav.json", function(data) {
 3         //1.getJSON方法获取json文件数据,data为json存储的数据对象组
 4         for(var i = 0; i < data.length; i++) {
 5             //2.循环访问data数组中的每个对象,长度为data.length
 6             $.each(data[i], function(key, val) {
 7                 //3.遍历每个data对象的键值对,遍历次数为3,原因json文件有3个键值对
 8                 //key代表属性名,val代表对应的属性值
 9                 if(data[i][key] == 0) {
10                     //4.判断该data对象是否存在菜单的父级菜单id为0
11                     //为0 则为一级菜单,生成li标签,显示菜单项名称data[i]["navTitle"]
12                     //同时添加li的class为data[i]["navId"]
13                     $("#nav-mainbox").append("<li class=‘" + data[i]["navId"] + "‘><span class=‘shead‘><img src=‘img/nav/" + data[i]["navId"] + ".png‘/></span><a>" + data[i]["navTitle"] + "</a><span class=‘sfoot‘><img src=‘img/nav/icon_caret_down_g.png‘/></span><ul></ul></li>");
14
15                     //7.页面首次加载时,只有第一项一级菜单的子菜单显示
16                     //其他子菜单项隐藏
17                     $("li.1").children("ul").slideDown();
18                     $("li.1").siblings().children("ul").slideUp();
19
20                     //6.为一级菜单绑定点击事件
21                     //一级菜单项可以滑动显示或隐藏子菜单项
22                     //同时,当前菜单显示,则其他都隐藏
23                     $("." + data[i]["navId"]).on("click", function() {
24                         $(this).children("ul").slideToggle();
25                         $(this).siblings().children("ul").slideUp();
26                     })
27
28                 }
29
30                 if(data[i][key] == i + 1) {
31                     //5.判断非一级菜单项
32                     //根据该对象的父级菜单id找li标签,成为其子菜单项
33                     $("." + data[i]["navParentId"]).find("ul").append("<li class=‘" + data[i]["navId"] + "‘><a href=‘" + data[i]["navUrl"] + "‘>" + data[i]["navTitle"] + "</a></li>");
34                 }
35             });
36
37         }
38     })
39 });

4.navtab.css

 1 body {
 2     margin: 0;
 3     padding: 0;
 4     font-family: "微软雅黑";
 5     font-size: 16px;
 6 }
 7
 8 ul,
 9 li {
10     list-style: none;
11 }
12
13 a,
14 a:hover,
15 a:active,
16 a:link {
17     text-decoration: none;
18     color: #3d3d3d;
19 }
20
21 #nav_box {
22     width: 220px;
23     height: 100%;
24
25 }
26
27 #nav_box #nav-mainbox {
28     padding: 0;
29
30 }
31
32 #nav-mainbox li {
33     background-color: #f2f2f2;
34     color: #333;
35     font-size: 14px;
36     position: relative;
37     line-height: 44px;
38     cursor: pointer;
39     border-bottom: 1px solid #dedede;
40     border-right: 1px solid #dedede;
41
42 }
43 #nav-mainbox li:hover{
44     background-color: #ADADAD;
45 }
46 .shead{
47     position: relative;
48     width: 40px;
49     height: 40px;
50     top: 10px;
51     padding: 10px;
52
53 }
54 .sfoot{
55     position: relative;
56     width: 40px;
57     height: 40px;
58     margin-left: 70px;
59
60 }
61
62 #nav-mainbox li ul{
63     padding: 0;
64 }
65
66 #nav-mainbox li ul li {
67     position: relative;
68     padding-left: 70px;
69     background-color: white;
70     border-bottom: 1px solid #dedede;
71     border-right: 1px solid #dedede;
72 }
73 #nav-mainbox li ul li:hover{
74     background-color: #ccc;
75 }

注意:一级菜单前面的icon的文件名称是其对应json文件中的navId值

正文结束!!!!!

原文地址:https://www.cnblogs.com/yankyblogs/p/9494915.html

时间: 2024-08-12 19:47:50

js控制json生成菜单——自制菜单(一)的相关文章

js控制的多级下拉菜单

最近身体不适,所以没能如期的更新,抱歉.这里直接把代码贴上,如果有不明白的地方,留言就行. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> &

在jsp中使用jstl,不使用JS,实现递归,生成N级菜单

参考材料:  http://blog.csdn.net/kimsoft/article/details/7801564 我的实现: 1.我的recursionMenu.jsp代码如下: 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ page import="com.lesl

基于MVC+EasyUI的Web开发框架经验总结(3)- 使用Json实体类构建菜单数据

近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开发框架保持一致,而在Web上,我主要采用EasyUI的前端界面处理技术,走MVC的技术路线,在重构完善过程中,很多细节花费不少时间进行研究和提炼,一步步走过来,也积累了不少经验,本系列将主要介绍我在进一步完善我的Web框架基础上积累的经验进行分享,本随笔主要介绍使用如何使用Json实体类构建菜单数据,然后在主界面中进行使用. 菜单的界面效果如下所示,菜单分为一级菜单.二级菜单.三级菜单,他们各自

基于MVC4+EasyUI的Web开发框架经验总结(3)- 使用Json实体类构建菜单数据

最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开发框架保持一致,而在Web上,我主要采用EasyUI的前端界面处理技术,走MVC的技术路线,在重构完善过程中,很多细节花费不少时间进行研究和提炼,一步步走过来,也积累了不少经验,本系列将主要介绍我在进一步完善我的Web框架基础上积累的经验进行分享,本随笔主要介绍使用如何使用Json实体类构建菜单数据,然后在主界面中进行使用. 菜单的界面效果如下所示,菜单分为一级菜单.二级菜单.三级菜单,他们各

Sharepoint2013 webpart 使用Jquery+json数据实现的菜单。

Sharepoint2013 webpart 使用Jquery+json数据实现的菜单. 分类: sharepoint2014-11-17 14:17 215人阅读 评论(0) 收藏 举报 把代码块1 复制到txt 里单击后缀名字为js  such as xxx.js.  把此文件上传的文档库.右键--文件完全URL 在Sharepoint2013 里创建 一个webart 内容编辑器--编辑webpart --在content Link--单击浏览 把上面的URL复制进去. js文件和样式文件

配置时间生成下拉菜单

<?php //设置时区 date_default_timezone_set('PRC'); //设置中国时区 ?> <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>配置时间生成下拉菜单</title> <link rel="stylesheet" type="text/css" hre

zepto.js swipe实现触屏tab菜单

今天我们来说下zepto.js,有兴趣的朋友可以先进这个网站“http://zeptojs.com/” ,这个可以说是手机里的jquery,但是它取消了hover,加上了swipe及tap这两个触屏功能.前几天,有朋友告诉我百度基于zepto.js做了一个webapp的UI,大家也可以看下:“http://gmu.baidu.com/”,有点像jquery ui的东西,大家有兴趣可以学习啊... 我们今天,用zepto.js的swipe来实现新浪手机网的tab菜单,大家可以先看下新浪的手机版“h

JS仿淘宝详情页菜单条智能定位效果

类似于淘宝详情页菜单条智能定位 对于每个人来说并不陌生!如下截图所示:红色框的那部分! 基本原理: 是用JS侦听滚动事件,当页面的滚动距离(页面滚动的高度)大于或者等于 "对象"(要滚动的对象)距离页面顶部的高度,也就是说滚动的对象与窗口的上边缘接触时,立即将对象定位属性position值改成fixed(固定) (除IE6以外,因为IE6不支持fixed).对于IE6用绝对定位position:absolute,top:就是"游览器滚动的top".在 IE6下浏览看

js实现二级月日联动菜单

直接上代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JS实现二级月日联动菜单</title> </head> <body> <form name="form1" method="post" action=""