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 相关文章推荐
Mozilla中显示textarea中选择的文字
Sep 07 Javascript
在js中使用&quot;with&quot;语句中跨frame的变量引用问题
Mar 08 Javascript
jquery插件jbox使用iframe关闭问题
Feb 09 Javascript
JavaScript词法作用域与调用对象深入理解
Nov 29 Javascript
Javascript模块化编程(一)模块的写法最佳实践
Jan 17 Javascript
js跨域问题浅析及解决方法优缺点对比
Nov 08 Javascript
JQuery实现的按钮倒计时效果
Dec 23 Javascript
js实现简单的省市县三级联动效果实例
Feb 18 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
Jul 27 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
Jan 08 Javascript
全面了解JavaScript的作用域链
Apr 03 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
Dec 14 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
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
2010/12/29 PHP
WordPress判断用户是否登录的代码
2011/03/17 PHP
php图片的裁剪与缩放生成符合需求的缩略图
2013/01/11 PHP
php常用数学函数汇总
2014/11/21 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
js实现简单登录功能的实例代码
2013/11/09 Javascript
jquery 图片缩放拖动的简单实例
2014/01/08 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
AngularJS发送异步Get/Post请求方法
2018/08/13 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
python集合比较(交集,并集,差集)方法详解
2018/09/13 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
python批量生成身份证号到Excel的两种方法实例
2021/01/14 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
介绍一下Linux文件的记录形式
2012/04/18 面试题
数控专业毕业生求职信范文
2013/09/21 职场文书
劳动模范事迹材料
2014/01/19 职场文书
初中生自我评价
2014/02/01 职场文书
2014年银行员工工作总结
2014/11/12 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
门卫岗位职责
2015/02/09 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP
Nginx反向代理及负载均衡如何实现(基于linux)
2021/03/31 Servers
Oracle表空间与权限的深入讲解
2021/11/17 Oracle