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 短路法代码精简
Aug 20 Javascript
javascript eval和JSON之间的联系
Dec 31 Javascript
javascript中&quot;/&quot;运算符常见错误
Oct 13 Javascript
jQuery setTimeout()函数使用方法
Apr 07 Javascript
解析Jquery取得iframe中元素的几种方法
Jul 04 Javascript
使用JS CSS去除IE链接虚线框的三种方法
Nov 14 Javascript
值得分享的轻量级Bootstrap Table表格插件
May 30 Javascript
封装获取dom元素的简单实例
Jul 08 Javascript
bootstrap datepicker限定可选时间范围实现方法
Sep 28 Javascript
概述jQuery中的ajax方法
Dec 16 Javascript
vue拖拽排序插件vuedraggable使用方法详解
Aug 21 Javascript
JavaScript 定时器详情
Nov 11 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
11个PHP 分页脚本推荐
2011/08/15 PHP
php抓取网站图片并保存的实现方法
2015/10/29 PHP
WordPress中获取所使用的模板的页面ID的简单方法
2015/12/31 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
很好用的js日历算法详细代码
2013/03/07 Javascript
JS 加入收藏夹的代码(主流浏览器通用)
2013/05/13 Javascript
js 实现浏览历史记录示例
2014/04/20 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
2014/06/05 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
2020/04/21 Javascript
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
js实现三角形粒子运动
2020/09/22 Javascript
python简单实现旋转图片的方法
2015/05/30 Python
使用Python中的tkinter模块作图的方法
2017/02/07 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
2018/05/08 Python
Python异步操作MySQL示例【使用aiomysql】
2019/05/16 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
css3实现椭圆轨迹旋转的示例代码
2018/10/29 HTML / CSS
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
石油大学毕业生自荐信
2014/01/28 职场文书
小学生新年寄语
2014/04/03 职场文书
捐款倡议书
2014/04/14 职场文书
安全教育月活动总结
2014/05/05 职场文书
会计专业求职信
2014/08/10 职场文书
财务会计岗位职责
2015/02/03 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
配置nginx 重定向到系统维护页面
2021/06/08 Servers