json+jQuery实现的无限级树形菜单效果代码


Posted in Javascript onAugust 27, 2015

本文实例讲述了json+jQuery实现的无限级树形菜单效果代码。分享给大家供大家参考。具体如下:

这里演示json树形菜单,JS无级树树形菜单,引入了jQuery插件,使用递归实现获取无级树数据并生成DOM结构,可以在JSON数据里 扩展无限级 看结构就明白。

先来看看运行效果截图:

json+jQuery实现的无限级树形菜单效果代码

在线演示地址如下:

具体代码如下:

<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="jquery-1.6.2.min.js"></script>
<title>JS无级树树形菜单</title>
<style type="text/css">
.menuTree{ margin-left:-30px;}
.menuTree div{ padding-left:30px;}
.menuTree div ul{ overflow:hidden; display:none; height:auto;}
.menuTree span{ display:block; height:25px; line-height:25px; padding-left:5px; margin:1px 0; cursor:pointer; border-bottom:1px solid #CCC;}
.menuTree span:hover{ background-color:#e6e6e6; color:#cf0404;}
.menuTree a{ color:#333; text-decoration:none;}
.menuTree a:hover{ color:#06F;}
.btn{ height:30px; margin-top:10px; border-bottom:1px solid #CCC;}
</style>
</head>
<body>
<div class="btn">
<input name="" type="button" id="btn_open" value="全部展开" />  
<input name="" type="button" id="btn_close" value="全部收缩" />
</div>
<div id="menuTree" class="menuTree"></div>
</body>
</html>
<script type="text/javascript">
var json = [{"name":"*a","list":[
 {"name":"**a","url":"#a1"},
 {"name":"**aa","list":[
  {"name":"***a","url":"#a11"},  {"name":"***aa","list":[ {"name":"****a","url":"#a111"},  {"name":"****aa","list":[ {"name":"*****a","url":"#a1111"},  {"name":"*****aa","url":"#a1112"}
  ]}
 ]},
  {"name":"***aaa","url":"#a13"},
  {"name":"***aaaa","url":"#a14"}
  ]
  },
  {"name":"**a","url":"#a3"}
 ]
 },
 {"name":"*b","list":[
 {"name":"**b","url":"#b1"},
 {"name":"**bb","list":[
   {"name":"****b","url":"#b111"},
   {"name":"****bb","url":"#b112"}
   ]
 },
 ]
 },
 {"name":"*c","list":[
 {"name":"**c","url":"#c1"},
 {"name":"**cc","url":"#c2"}
 ]
 },
 {"name":"*d"}
 ]
/*递归实现获取无级树数据并生成DOM结构*/
var str = "";
var forTree = function(o){
 for(var i=0;i<o.length;i++){
 var urlstr = "";
 try{
 if(typeof o[i]["url"] == "undefined"){
 urlstr = "<div><span>"+ o[i]["name"] +"</span><ul>";
 }else{
 urlstr = "<div><span><a href="+ o[i]["url"] +">"+ o[i]["name"] +"</a></span><ul>"; 
 }
 str += urlstr;
 if(o[i]["list"] != null){
 forTree(o[i]["list"]);
 }
 str += "</ul></div>";
 }catch(e){}
 }
 return str;
}
/*添加无级树*/
document.getElementById("menuTree").innerHTML = forTree(json);
/*树形菜单*/
var menuTree = function(){
 //给有子对象的元素加[+-]
 $("#menuTree ul").each(function(index, element) {
 var ulContent = $(element).html();
 var spanContent = $(element).siblings("span").html();
 if(ulContent){
 $(element).siblings("span").html("[+] " + spanContent) 
 }
 });
 $("#menuTree").find("div span").click(function(){
 var ul = $(this).siblings("ul");
 var spanStr = $(this).html();
 var spanContent = spanStr.substr(3,spanStr.length);
 if(ul.find("div").html() != null){
 if(ul.css("display") == "none"){
 ul.show(300);
 $(this).html("[-] " + spanContent);
 }else{
 ul.hide(300);
 $(this).html("[+] " + spanContent);
 }
 }
 })
}()
/*展开*/
$("#btn_open").click(function(){
 $("#menuTree ul").show(300);
 curzt("-");
})
/*收缩*/
$("#btn_close").click(function(){
 $("#menuTree ul").hide(300);
 curzt("+");
})
function curzt(v){
 $("#menuTree span").each(function(index, element) {
 var ul = $(this).siblings("ul");
 var spanStr = $(this).html();
 var spanContent = spanStr.substr(3,spanStr.length);
 if(ul.find("div").html() != null){
 $(this).html("["+ v +"] " + spanContent);
 }
 }); 
}
</script>

希望本文所述对大家的jquery程序设计有所帮助。

Javascript 相关文章推荐
JavaScript DOM 学习第二章 编辑文本
Feb 19 Javascript
JavaScript中的ArrayBuffer详细介绍
Dec 08 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
Jan 23 Javascript
jQuery聚合函数实例
May 21 Javascript
快速掌握jQuery插件开发
Jan 19 Javascript
Bootstrap轮播图学习使用
Feb 10 Javascript
jquery中封装函数传递当前元素的方法示例
May 05 jQuery
EasyUI在Panel上动态添加LinkButton按钮
Aug 11 Javascript
Angular2开发环境搭建教程之VS Code
Dec 15 Javascript
使用layer弹窗,制作编辑User信息页面的方法
Sep 27 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
什么是SOLID
Mar 24 Javascript
jQuery on()方法示例及jquery on()方法的优点
Aug 27 #Javascript
js实现仿京东2级菜单效果(带延时功能)
Aug 27 #Javascript
jQuery UI设置固定日期选择特效代码分享
Aug 27 #Javascript
js实现的早期滑动门菜单效果代码
Aug 27 #Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
Aug 27 #Javascript
js实现向右横向滑出的二级菜单效果
Aug 27 #Javascript
jQuery实现输入框下拉列表树插件特效代码分享
Aug 27 #Javascript
You might like
跟我学Laravel之路由
2014/10/15 PHP
WordPress迁移时一些常见问题的解决方法整理
2015/11/24 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
PHP数组常用函数实例小结
2018/08/20 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
javascript控制swfObject应用介绍
2012/11/29 Javascript
JavaScript简介
2015/02/15 Javascript
Sea.JS知识总结
2016/05/05 Javascript
jQuery实现级联下拉框实战(5)
2017/02/08 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
vue中使用vee-validator完成表单校验方案
2019/11/01 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
python实现定制交互式命令行的方法
2014/07/03 Python
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
python发送HTTP请求的方法小结
2015/07/08 Python
Python 12306抢火车票脚本
2018/02/07 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
numpy.linspace函数具体使用详解
2019/05/27 Python
python内存管理机制原理详解
2019/08/12 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
django中的图片验证码功能
2019/09/18 Python
使用python3 实现插入数据到mysql
2020/03/02 Python
巴西女装购物网站:Eclectic
2018/04/24 全球购物
生产现场工艺工程师岗位职责
2013/11/28 职场文书
大四自我鉴定
2014/02/08 职场文书
六一节目主持词
2014/04/01 职场文书
如何签定毕业生就业协议书
2014/09/28 职场文书
二年级语文上册复习计划
2015/01/19 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
JS实现简单九宫格抽奖
2022/06/28 Javascript
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL