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 相关文章推荐
让Firefox支持event对象实现代码
Nov 07 Javascript
jquery UI 1.72 之datepicker
Dec 29 Javascript
javascript来定义类的规范小结
Nov 19 Javascript
来自国外的30个基于jquery的Web下拉菜单
Jun 22 Javascript
如何动态的导入js文件具体该怎么实现
Jan 14 Javascript
JavaScript日期类型的一些用法介绍
Mar 02 Javascript
javascript检查浏览器是否已经启用XX功能
Jul 10 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
Apr 28 jQuery
微信小程序项目总结之点赞 删除列表 分享功能
Jun 25 Javascript
浅析vue-router原理
Oct 19 Javascript
vue.js 2.0实现简单分页效果
Jul 29 Javascript
深入了解Vue.js 混入(mixins)
Jul 23 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基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
php.ini中的php-5.2.0配置指令详解
2008/03/27 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
改写函数实现PHP二维/三维数组转字符串
2013/09/13 PHP
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
php并发加锁示例
2016/10/17 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
PHP判断是否是微信打开还是浏览器打开的方法
2019/02/27 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
js表单提交和submit提交的区别实例分析
2015/12/10 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
详解Vue监听数据变化原理
2017/03/08 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
2017/05/30 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
python爬虫headers设置后无效的解决方法
2017/10/21 Python
python在ubuntu中的几种安装方法(小结)
2017/12/08 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
python列表生成器迭代器实例解析
2019/12/19 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
斯凯奇新西兰官网:SKECHERS新西兰
2018/02/22 全球购物
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
个性婚礼策划方案
2014/05/17 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
商铺租房协议书范本
2014/12/04 职场文书
民事答辩状格式范文
2015/05/21 职场文书
刑事上诉状范文
2015/05/22 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js
html网页引入svg图片的4种方式
2022/08/05 HTML / CSS