JS无限极树形菜单,json格式、数组格式通用示例


Posted in Javascript onJuly 30, 2013

修改了一下数据格式,是json和数组或者混合型的数据都通用,不用特定key等

<!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="http://d1.lashouimg.com/static/js/release/jquery-1.4.2.min.js"></script> 
<title>JS无级树树形菜单,json格式,数组格式通用</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 = { "navnums": { "0": "8051", "4": "4969", "8": "206", "5": "126", "9": "2174" }, "hotwords": "美食", "mvonline": [9, 8, [9, 8, 7, 6, 5, 4], 6, 5, 4], "district_online": "1", "zone_online": "1", "subway_online": "1", "city_online": "1" }; 
/*递归实现获取无级树数据并生成DOM结构*/ 
var str = ""; 
var forTree = function (o) { 
var urlstr = ""; 
var keys = new Array(); 
for (var key in o) { 
keys.push(key); 
} 
for (var j = 0; j < keys.length; j++) { 
k = keys[j]; 
if (typeof o[k] == "object") { 
urlstr = "<div><span>" + k + "</span><ul>"; 
} else { 
urlstr = "<div><span>" + k + "=" + o[k] + "</span><ul>"; 
} 
str += urlstr; 
var kcn = 0; 
if (typeof o[k] == "object") { 
for (var kc in o[k]) { 
kcn++; 
} 
} 
if (kcn > 0) { 
forTree(o[k]); 
} 
str += "</ul></div>"; 
} 
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>
Javascript 相关文章推荐
jQuery插件开发基础简单介绍
Jan 07 Javascript
js实现简单选项卡与自动切换效果的方法
Apr 10 Javascript
jQuery遍历json的方法(推荐)
Jun 12 Javascript
AngularJS压缩JS技巧分析
Nov 08 Javascript
微信小程序 地图(map)实例详解
Nov 16 Javascript
jQuery niceScroll滚动条错位问题的解决方法
Feb 03 jQuery
vue 组件中slot插口的具体用法
Apr 03 Javascript
详解vuex结合localstorage动态监听storage的变化
May 03 Javascript
浅谈vue同一页面中拥有两个表单时,的验证问题
Sep 18 Javascript
图文详解vue框架安装步骤
Feb 12 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
Feb 14 jQuery
JS实现获取数组中最大值或最小值功能示例
Mar 02 Javascript
js中widow.open()方法使用详解
Jul 30 #Javascript
Extjs NumberField后面加单位实现思路
Jul 30 #Javascript
Js中获取frames中的元素示例代码
Jul 30 #Javascript
js中的屏蔽的使用示例
Jul 30 #Javascript
使用js正则控制input标签只允许输入的值
Jul 29 #Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
Jul 29 #Javascript
js保留两位小数使用toFixed实现
Jul 29 #Javascript
You might like
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
实例说明为什么不要行内使用javascript
2014/04/18 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
2016/10/05 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
2017/04/12 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
linux 后台运行node服务指令方法
2018/05/23 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
python将ansible配置转为json格式实例代码
2017/05/15 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
2017/11/24 Python
Python浮点数四舍五入问题的分析与解决方法
2019/11/19 Python
Python yield的用法实例分析
2020/03/06 Python
Python+OpenCV图像处理——实现轮廓发现
2020/10/23 Python
纯CSS3制作的简洁蓝白风格的登录模板(非IE效果更好)
2013/08/11 HTML / CSS
HTML5 新事件 小结
2009/07/16 HTML / CSS
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
美国在线珠宝商店:SZUL
2017/02/11 全球购物
大学生毕业的自我鉴定
2013/11/13 职场文书
党员四风剖析材料
2014/08/27 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
2014年乡镇卫生院工作总结
2014/11/24 职场文书
加班费申请报告
2015/05/15 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
asyncio异步编程之Task对象详解
2022/03/13 Python