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 相关文章推荐
关于html+ashx开发中几个问题的解决方法
Jul 18 Javascript
JQuery触发事件例如click
Sep 11 Javascript
js树插件zTree获取所有选中节点数据的方法
Jan 28 Javascript
jQueryUI中的datepicker使用方法详解
May 25 Javascript
js中获取时间new Date()的全面介绍
Jun 20 Javascript
AngularJs Injecting Services Into Controllers详解
Sep 02 Javascript
angular4自定义组件详解
Sep 28 Javascript
解决easyui日期时间框ie的兼容的问题
Mar 01 Javascript
JS实现动态生成html table表格的方法分析
Jul 11 Javascript
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
Mar 13 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
Apr 25 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
Aug 18 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
ThinkPHP简单使用memcache缓存的方法
2016/11/15 PHP
php中的buffer缓冲区用法分析
2019/05/31 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
2015/08/07 Javascript
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
JavaScript编写九九乘法表(两种任选)
2017/02/04 Javascript
javascript实现文件拖拽事件
2018/03/29 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
js实现简易拖拽的示例
2020/10/26 Javascript
python网络编程学习笔记(四):域名系统
2014/06/09 Python
10个易被忽视但应掌握的Python基本用法
2015/04/01 Python
python实现将元祖转换成数组的方法
2015/05/04 Python
python 性能优化方法小结
2017/03/31 Python
python使用super()出现错误解决办法
2017/08/14 Python
python使用logging模块发送邮件代码示例
2018/01/18 Python
PyTorch学习笔记之回归实战
2018/05/28 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
Python中一般处理中文的几种方法
2019/03/06 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
Python实现仿射密码的思路详解
2020/04/23 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
党员承诺书怎么写
2014/05/20 职场文书
交通志愿者活动总结
2014/06/27 职场文书
中学生爱国演讲稿
2014/09/05 职场文书
2014年初级职称工作总结
2014/12/08 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
2015年大学班长个人工作总结
2015/04/24 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书
同学聚会致辞集锦
2015/07/28 职场文书
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js