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 相关文章推荐
ExtJs的Date格式字符代码
Dec 30 Javascript
最新的10款jQuery内容滑块插件分享
Sep 18 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
Nov 14 Javascript
A标签触发onclick事件而不跳转的多种解决方法
Jun 27 Javascript
jquery实现标签上移、下移、置顶
Apr 26 Javascript
BootStrap 超链接变按钮的实现方法
Sep 25 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
Mar 26 Javascript
vue.js中指令Directives详解
Mar 20 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
Dec 06 jQuery
js canvas实现红包照片效果
Aug 21 Javascript
Node.js安装详细步骤教程(Windows版)详解
Sep 01 Javascript
使用flow来规范javascript的变量类型
Sep 12 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
深入PHP数据缓存的使用说明
2013/05/10 PHP
php使用array_rand()函数从数组中随机选择一个或多个元素
2014/04/28 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
2015/11/17 PHP
php的socket编程详解
2016/11/20 PHP
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
浅析JS获取url中的参数实例代码
2016/06/14 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
Vue组件和Route的生命周期实例详解
2018/02/10 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
Vue实现点击按钮复制文本内容的例子
2019/11/09 Javascript
JS Web Flex弹性盒子模型代码实例
2020/03/10 Javascript
Python中super()函数简介及用法分享
2016/07/11 Python
Python程序运行原理图文解析
2018/02/10 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
python中自带的三个装饰器的实现
2019/11/08 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
python爬虫scrapy基本使用超详细教程
2021/02/20 Python
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
英文自荐信
2013/12/19 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
医学生就业推荐表自我鉴定
2014/03/26 职场文书
合伙经营协议书范本
2014/09/13 职场文书
初中毕业生自我评价
2015/03/02 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
汉语拼音教学反思
2016/02/22 职场文书
八年级作文之感恩
2019/11/22 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
Apache POI的基本使用详解
2021/11/07 Servers
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS