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 相关文章推荐
彻底搞懂JS无缝滚动代码
Jan 03 Javascript
JavaScript判断DIV内容是否为空的方法
Jan 29 Javascript
教你一步步用jQyery实现轮播器
Dec 18 Javascript
Jquery树插件zTree实现菜单树
Jan 24 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
Feb 08 Javascript
js使用原型对象(prototype)需要注意的地方
Aug 28 Javascript
基于webpack 实用配置方法总结
Sep 28 Javascript
npm的lock机制解析
Jun 20 Javascript
layui实现下拉框三级联动
Jul 26 Javascript
JavaScript实现tab栏切换效果
Mar 16 Javascript
Vue封装Axios请求和拦截器的步骤
Sep 16 Javascript
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
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
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
2010/08/21 PHP
thinkphp的c方法使用示例
2014/02/24 PHP
Laravel框架实现利用监听器进行sql语句记录功能
2018/06/06 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
js实现简洁的TAB滑动门效果代码
2015/09/06 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
NodeJS和BootStrap分页效果的实现代码
2016/11/07 NodeJs
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
javascript 注释代码的几种方法总结
2017/01/04 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
Vue组件化开发思考
2018/02/02 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
vue2 设置router-view默认路径的实例
2018/09/20 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
[01:04:22]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 IG vs EG
2018/04/01 DOTA
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
Python简明入门教程
2015/08/04 Python
python框架django基础指南
2016/09/08 Python
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
Python语言异常处理测试过程解析
2020/01/08 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
基于Canvas+Vue的弹幕组件的实现
2019/07/23 HTML / CSS
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
幼儿园评语大全
2014/04/17 职场文书
班干部演讲稿
2014/04/24 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
导游词400字
2015/02/13 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
股东大会通知
2015/04/24 职场文书
Python基础学习之奇异的GUI对话框
2021/05/27 Python
SQL Server数据库的三种创建方法汇总
2023/05/08 MySQL