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入门——事件切换之toggle()方法应用介绍
Feb 05 Javascript
javascript数组的使用
Mar 28 Javascript
自己实现ajax封装示例分享
Apr 01 Javascript
有关jQuery中parent()和siblings()的小问题
Jun 01 Javascript
简单实现js间歇或无缝滚动效果
Jun 29 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
Mar 02 Javascript
详解JS中遍历语法的比较
Apr 07 Javascript
jQuery导航条固定定位效果实例代码
May 26 jQuery
ES6 javascript的异步操作实例详解
Oct 30 Javascript
浅谈Angular单元测试总结
Mar 22 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
Sep 27 Javascript
JS实现省市县三级下拉联动
Apr 10 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脚本的10个技巧(2)
2006/10/09 PHP
PHP 批量更新网页内容实现代码
2010/01/05 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
2013/06/27 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
2015/06/10 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
2015/08/18 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
2016/10/10 Javascript
浅谈js函数的多种定义方法与区别
2016/11/29 Javascript
js中作用域的实例解析
2017/03/16 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
vue设置导航栏、侧边栏为公共页面的例子
2019/11/01 Javascript
js DOM的事件常见操作实例详解
2019/12/16 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
2020/02/17 Javascript
python实现简单神经网络算法
2018/03/10 Python
python爬取各类文档方法归类汇总
2018/03/22 Python
Django中的Model操作表的实现
2018/07/24 Python
Python Matplotlib库安装与基本作图示例
2019/01/09 Python
python中的数据结构比较
2019/05/13 Python
让IE下支持Html5的placeholder属性的插件
2014/09/02 HTML / CSS
世界上最大的各式箱包网络零售店:eBag
2016/07/21 全球购物
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
卫生安全检查制度
2014/02/04 职场文书
运动会获奖感言
2014/02/11 职场文书
超市国庆节促销方案
2014/02/20 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
Python办公自动化解决world文件批量转换
2021/09/15 Python
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android