策略:数据库就一张表,前端查询出所有的可显示的菜单,在前端进行循环展示。

1,数据库表的设计

CREATE TABLEsys_menu (

idINT NOT NULLAUTO_INCREMENT,

nameVARCHAR(64) NOT NULL,

urlVARCHAR(255),

pidINT NOT NULL DEFAULT 0,

isLeafTINYINT NOT NULL DEFAULT 1COMMENT'0表示不是叶子,1表示是叶子',

statusTINYINT NOT NULL DEFAULT 1COMMENT'0表示禁用,1表示启用',

seqTINYINT NOT NULL DEFAULT 0COMMENT'同级中的顺序,0-n,从上到下',PRIMARY KEY(id)

);

把菜单当作一个多叉树,root节点为虚拟节点,id为0。第一层节点表示一级菜单,以此类推。其中,isLeaf表示该菜单是不是叶子节点。

简单的填充数据如下所示:

2,查询所有菜单的接口(略,简单的sql查询)

需要过滤status=0,也就是禁用的菜单。

3,前端展示

3.1 html代码和css样式

body中就是如下简单的代码

css样式(从网上随便找的)

a{text-decoration:none;

}ul, li{list-style:none;margin:0;padding:0;

}

/*定义菜单*/.Menue li{background:#111;color:#fff;height:30px;line-height:30px;position:relative;float:left;margin-right:5px;width:100px;text-align:center;font-family:Arial, Helvetica, sans-serif;

}.Menue li a{color:#fff;font-size:14px;display:block;

}

/*下拉菜单样式*/ul.sub_menu{position:absolute;width:100px;display:none;z-index:999;

}.Menue li ul.sub_menu li{background:none;color:#555;font-size:12px;border-bottom:1px #333 solid;position:relative;width:100px;height:30px;

}.Menue li ul.sub_menu li.last{border-bottom:none;

}

/*js会对最后一个li添加该class,去掉border-bottom效果*/.Menue li ul.sub_menu li a{background:#222;color:#888;display:block;height:30px;

}.Menue li ul.sub_menu li a:hover, .Menue li ul.sub_menu li a.now{background:#f90;color:#fff;

}.Menue li.now, .Menue li.current{background:#f60;color:#fff;

}

/*如果有下拉菜单添加的class*/.hasmenu{background:url(arrow.png) no-repeat right;padding-right:15px;

}

/*主导航箭头向下*/.Menue li a.hasmenu{background:url(arrow.png) no-repeat right;padding-right:15px;background-position:right -30px;

}

/*下拉菜单箭头向右*/.Menue li ul.sub_menu li a.hasmenu{background:#222 url(arrow.png) no-repeat right top;

}.Menue li ul.sub_menu li a.hasmenu:hover{background:#f90 url(arrow.png) no-repeat right top;color:#fff;

}

3.2 jquery ajax获取所有的菜单数据

$.ajax({

type:"GET",

url:"/menu/getMenus.do",

dataType:"json",

success:function(result) {if (result.status > 0) {//获取到菜单数据,进行展示

//1,展示顶级菜单

var list =result.body;vari;for (i = 0; i < list.length; i++) {//console.log(typeof list[i].url == 'undefined');//如果url不存在,则为undefined,应该用typeof判断

}//$(".Menue").html("");

$(".Menue").html(showFirstLevelMenu(list));

console.log(showFirstLevelMenu(list))//在菜单全部显示后,增加hover件事

addHover();

}else{

alert(result.message);

}

},

error:function() {

alert("服务器故障,请刷新或稍后重试!");

}

})

当获取到数据后,将数据拼装成节点html数据,设置到class=Menu的ul中。然后对动态添加的html代码段加上hover事件

$(".Menue").html(showFirstLevelMenu(list));

//在菜单全部显示后,增加hover事件

addHover();

3.3 递归拼接

使用递归调用实现拼接子菜单

functionshowFirstLevelMenu(list) {//class = Menu_li

//遍历list找到

var menu = "";var subList = newArray();vari;for (i = 0; i < list.length; i++) {if (list[i].pid == 0) {

subList.push(list[i]);

}

}

subList.sort(function(a, b) {return a.seq - b.seq;//从小到大排序

});

alert(subList.length)for (i = 0; i < subList.length; i++) {

menu+= '

' + showSubMenu(list, subList[i]) + '';

}returnmenu;

}functionshowSubMenu(list, menuInfo) {//class = sub_menu

var menu = '' + menuInfo.name + '';if (menuInfo.isLeaf == 0) {//有子菜单

var subList = newArray();vari;for (i = 0; i < list.length; i++) {if (list[i].pid ==menuInfo.id) {

subList.push(list[i]);

}

}if (subList.length != 0) {

subList.sort(function(a, b) {return a.seq - b.seq;//从小到大排序

});

menu+= '

  • ';for (i = 0; i < subList.length; i++) {

menu+= '

' + showSubMenu(list, subList[i]) + '';

}

menu+= '

';

}

}returnmenu;

}

3.4 hover事件(网上粘贴的)

functionaddHover() {//为导航设置默认高亮 与本菜单无关

$("ul.Menue li.Menue_li:eq(0)").addClass("current")/*jquery menu 开始*/

//为子菜单的最后一个li添加样式,适合为li添加下划线时去除最后一个的下划线

$(".sub_menu").find("li:last-child").addClass("last")//遍历全部li,判断是否包含子菜单,如果包含则为其添加箭头指示状态

$(".Menue li").each(function() {if ($(this).find("ul").length != 0) {

$(this).find("a:first").addClass("hasmenu")

}

})//$(".Menue li").hover(function() {

$(this).addClass("now");var menu = $(this);

menu.find("ul.sub_menu:first").show();

},function() {

$(this).removeClass("now");

$(this).find("ul.sub_menu:first").hide();

});var submenu = $(".sub_menu").find(".sub_menu")

submenu.css({left:"100px", top: "0px"})

$(".sub_menu li").hover(function() {

$(this).find("a:first").addClass("now")

$(this).find("ul:first").show();

},function() {

$(this).find("a:first").removeClass("now")

$(this).find("ul:first").hide()

});/*jquery menu 结束*/}

3.5 最终页面显示结果

=====>>

=====>>

无限级菜单 mysql设计_无限级菜单简单的设计相关推荐

  1. web登录界面设计_出色的Web界面设计的7条规则

    web登录界面设计 When you work on a website or on the design of web pages, remember that their success is n ...

  2. mysql关于菜单权限的设计_管理系统之权限的设计和实现

    本文主要想对前端权限管理功能实现做一个分享,所以并不会对后台管理的框架结构做太详细介绍,如果有朋友对其他有兴趣可以留言. 基本设计和分析 前端 vue + elementui 服务端: node + ...

  3. 三级菜单页面布局_三级菜单的最快导航布局

    三级菜单页面布局 重点 (Top highlight) When users navigate an interface, there's a need for speed. The faster i ...

  4. 响应式多级菜单 侧边菜单栏_大菜单,小屏幕:响应式,多级导航

    响应式多级菜单 侧边菜单栏 如果您曾经在响应式网站上工作,那么毫无疑问,您必须解决这个新兴领域中最棘手的问题之一:导航. 对于简单的导航,解决方案可以很简单. 但是,如果您要处理的事情比较复杂,可能有 ...

  5. 学生宿舍管理mysql设计_学生宿舍管理系统的设计与实现(PHP,MySQL)(含录像)

    学生宿舍管理系统的设计与实现(,MySQL)(含录像)(论文10000字,程序代码,MySQL数据库) 结合学校宿舍实际情况开发一款基于Web的高校宿舍管理系统,主要适用于宿舍管理员,学生两类人员的使 ...

  6. 职工考勤管理MySQL课程设计_考勤管理系统数据库课程设计.doc

    课 程 设 计 课程名称 数据库系统概论_____ 题目名称 考勤管理系统 学生学院 计算机学院 专业班级 学 号 学生姓名 ________ 指导教师 左亚尧 2012年 1月 16日 一.需求分析 ...

  7. 网上订餐系统 mysql 数据库设计_网上订餐系统的设计与实现

    摘要: 进入21世纪,伴随着我国的综合国力的迅速提升,科技的迅猛发展,网络信息化和电子商务已经渗透到了人类社会的各个方面与角落.网购再也不是新鲜的代名词,它已经成为我们寻常生活的一部分.人们在网上购买 ...

  8. ios 动画设计_动画和讲故事在设计中的力量

    ios 动画设计 As human beings, we've always been fond of storytelling. Just think of campfire stories, Sa ...

  9. 时间轴ui设计_我应该在UI设计上花更多时间吗?

    时间轴ui设计 Let's start with an example of communication skills: they are important for any profession, ...

  10. 安装工程造价课程设计_安装工程造价课程设计的图纸-上海装修报价

    安装工程造价是什么它与工程造价有什么区别 更多关于工程造价的知识 > 网友都在找: 安装预算教程 消防工程造价 造价电气图 消防... 水电安装工程每平方工程造价是多少 1.平米成本:193元. ...

最新文章

  1. 性能优化之Java多线程批量拆分List导入数据库
  2. FPGA之道(45)正确的变量访问思路
  3. python接口返回json处理_python 接口返回的json字符串实例
  4. linux之git入门命令
  5. node mysql json_Node.js JSON模块用法实例分析
  6. 安卓手机小说阅读器_粉笔免费小说阅读器app下载-粉笔免费小说阅读器手机版下载v1.0.1...
  7. java自己写不出来_java学习中,能看懂代码,但是自己写不出来怎么处理?
  8. 纯C语言编程-游戏之弹跳球
  9. android 人脸相似度,微软“我们”正式发布 :测试人脸相似度
  10. Java定义一个名为Square继承Shape抽象类,覆盖Shape类中的抽象方法getPerimeter()和getArea
  11. mysql 约束 分类,MySQL约束类型及举例介绍
  12. js实现pc打开摄像头,拍照,下载
  13. mysql错误码2002_MySQL错误ERROR 2002 (HY000): Can't connect to local MySQL server through socket
  14. 归一化mysql函数_数据归一化和两种常用的归一化方法
  15. 探探提醒对方账号异常_我告诉你探探中对方账号异常怎么回事
  16. css 会飞的蝴蝶,CSS3怎么制作蝴蝶飞舞的动画
  17. Element Plus 虚拟化表格组件的使用(排序、筛选、自定义单元格渲染) - 个人使用总结
  18. 绘制系统响应函数的频率响应曲线
  19. 折旧程序一直运行,无法停下怎么办?
  20. 数字图像处理学习笔记之一 DIP绪论与MATLAB基础

热门文章

  1. 思科CCNA考试实验常用的命令
  2. 关于对cross-browser支持的一些看法
  3. Oracle常用操作之登录名和密码大小写问题
  4. 在 Django 中使用 pyecharts
  5. caffe学习(七):使用py-faster-rcnn来训练voc2007数据集(Ubuntu)
  6. opengl es 2.0环境
  7. linux c 定时器
  8. 新装ubuntu9.10后配置全过程(很多常见问题的解决方法)
  9. iOS 7 标签栏控制器进行模态视图跳转后变成透明
  10. Luogu P2580 于是他错误的点名开始了 Trie树 字典树