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 相关文章推荐
添加到收藏夹代码(兼容几乎所有的浏览器)
Jan 09 Javascript
有一段有意思的代码-javascript现实多行信息
Aug 26 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
Jul 03 Javascript
js中生成map对象的方法
Jan 09 Javascript
js通过location.search来获取页面传来的参数
Sep 11 Javascript
jQuery+CSS3折叠卡片式下拉列表框实现效果
Nov 02 Javascript
浅析Javascript中bind()方法的使用与实现
May 30 Javascript
jQuery Ztree行政地区树状展示(点击加载)
Nov 09 Javascript
JS前端加密算法示例
Dec 22 Javascript
Vue实现点击显示不同图片的效果
Aug 10 Javascript
JavaScript字符和ASCII实现互相转换
Jun 03 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
Aug 07 jQuery
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+dbfile开发小型留言本
2006/10/09 PHP
php a simple smtp class
2007/11/26 PHP
php microtime获取浮点的时间戳
2010/02/21 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
浅谈php提交form表单
2015/07/01 PHP
PHP程序员的技术成长规划
2016/03/25 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
让你的网站可编辑的实现js代码
2009/10/19 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
Javascript遍历table中的元素示例代码
2014/07/08 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
jQuery图片切换动画特效
2016/11/02 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
vuejs如何配置less
2017/04/25 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
[03:04]2018年度DOTA2玩家最喜爱的主播-完美盛典
2018/12/16 DOTA
python函数参数*args**kwargs用法实例
2013/12/04 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
django中media媒体路径设置的步骤
2019/11/15 Python
Python 实现黑客帝国中的字符雨的示例代码
2020/02/20 Python
Python中实现输入一个整数的案例
2020/05/03 Python
Python extract及contains方法代码实例
2020/09/11 Python
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
村官学习十八大感想
2014/01/15 职场文书
优秀员工获奖感言
2014/03/01 职场文书
协议书与合同的区别
2014/04/18 职场文书
英文求职信范文
2014/05/23 职场文书
2016暑期社会实践新闻稿
2015/11/25 职场文书
基于Python实现将列表数据生成折线图
2022/03/23 Python