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 相关文章推荐
jQuery+CSS 实现的超Sexy下拉菜单
Jan 17 Javascript
理解Javascript_11_constructor实现原理
Oct 18 Javascript
JavaScript 学习历程和心得分享
Dec 12 Javascript
jQuery的12招常用技巧分享
Aug 08 Javascript
一行命令搞定node.js 版本升级
Jul 20 Javascript
jquery无限级联下拉菜单简单实例演示
Nov 23 Javascript
从零学习node.js之详解异步控制工具async(八)
Feb 27 Javascript
JS实现搜索关键词的智能提示功能
Jul 07 Javascript
bootstrap table sum总数量统计实现方法
Oct 29 Javascript
vue检测对象和数组的变化分析
Jun 30 Javascript
JS将网址url转化为JSON格式的方法
Jul 02 Javascript
vue项目设置scrollTop不起作用(总结)
Dec 21 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
php 5.3.5安装memcache注意事项小结
2011/04/12 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
理解JavaScript中的对象 推荐
2011/01/09 Javascript
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
给html超链接设置事件不使用href来完成跳
2014/04/20 Javascript
jQuery 和 CSS 的文本特效插件集锦
2014/12/12 Javascript
Vue 2.0 侦听器 watch属性代码详解
2019/06/19 Javascript
微信小程序事件 bindtap bindinput代码实例
2019/08/26 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
2020/11/12 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
vue打开新窗口并实现传参的图文实例
2021/03/04 Vue.js
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
Python实现冒泡,插入,选择排序简单实例
2014/08/18 Python
Python多线程实例教程
2014/09/06 Python
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
浅析Python编写函数装饰器
2016/03/18 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
2019/01/09 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
2020/03/30 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
美国购买隐形眼镜网站:Lenses For Less
2020/07/05 全球购物
Shell编程面试题
2012/05/30 面试题
汉语言文学毕业生求职信
2013/10/01 职场文书
授权委托书公证
2014/09/14 职场文书
2014年勤工助学工作总结
2014/11/24 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
团代会闭幕词
2015/01/28 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
Python入门之基础语法详解
2021/05/11 Python