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+CSS3实现3D立方体旋转效果
Nov 10 Javascript
JQuery实现的按钮倒计时效果
Dec 23 Javascript
基于JavaScript实现跳转提示页面
Sep 24 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
Oct 31 Javascript
React学习笔记之条件渲染(一)
Jul 02 Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
Oct 29 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
May 30 jQuery
通过GASP让vue实现动态效果实例代码详解
Nov 24 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
Nov 26 Javascript
JavaScript 接口原理与用法实例详解
May 12 Javascript
Nest.js环境变量配置与序列化详解
Feb 21 Javascript
Node.js实现断点续传
Jun 23 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实现Ftp用户的在线管理的代码
2007/03/06 PHP
php的POSIX 函数以及进程测试的深入分析
2013/06/03 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
让getElementsByName适应IE和firefox的方法
2007/09/24 Javascript
javascript利用控件对windows的操作实现原理与应用
2012/12/23 Javascript
jquery Mobile入门—多页面切换示例学习
2013/01/08 Javascript
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
js清除浏览器缓存的几种方法
2017/03/15 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
node.js爬取中关村的在线电瓶车信息
2018/11/13 Javascript
javascript用defineProperty实现简单的双向绑定方法
2020/04/03 Javascript
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
web.py在模板中输出美元符号的方法
2014/08/26 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
运行django项目指定IP和端口的方法
2018/05/14 Python
使用Python测试Ping主机IP和某端口是否开放的实例
2019/12/17 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
HTML5 canvas基本绘图之图形变换
2016/06/27 HTML / CSS
Volcom英国官方商店:美国殿堂级滑板、冲浪、滑雪服装品牌
2019/03/13 全球购物
丽笙酒店官方网站:Radisson Hotels
2019/05/07 全球购物
举例说明类变量和实例变量的区别
2016/06/30 面试题
大学生农村教师实习自我鉴定
2013/09/21 职场文书
校园奶茶店创业计划书
2014/01/23 职场文书
《骆驼和羊》教学反思
2014/02/27 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
搬迁通知
2015/04/20 职场文书
工作后的感想
2015/08/07 职场文书
Go语言带缓冲的通道实现
2021/04/26 Golang