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 相关文章推荐
JS 学习笔记 防止发生命名冲突
Jul 30 Javascript
js replace替换所有匹配的字符串
Feb 13 Javascript
jquery移动端TAB触屏切换实现效果
Dec 22 Javascript
JQuery EasyUI的使用
Feb 24 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
Sep 02 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
Dec 06 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
Feb 23 Javascript
使用vue构建一个上传图片表单
Jul 04 Javascript
JS实现的按钮点击颜色切换功能示例
Oct 19 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
May 13 Javascript
js实现随机div颜色位置 类似满天星效果
Oct 24 Javascript
让你30分钟快速掌握vue3教程
Oct 26 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/06/20 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
2018/03/31 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
js实现星星打分效果的方法
2020/07/05 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
2016/08/29 Javascript
Sortable.js拖拽排序使用方法解析
2016/11/04 Javascript
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
WebStorm ES6 语法支持设置&amp;babel使用及自动编译(详解)
2017/09/08 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
package.json配置文件构成详解
2019/08/27 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
详解Vue的mixin策略
2020/11/19 Vue.js
[01:20:06]TNC vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python中wx将图标显示在右下角的脚本代码
2013/03/08 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
Python简单I/O操作示例
2019/03/18 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
如何用Python做一个微信机器人自动拉群
2019/07/03 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
Python如何实现的二分查找算法
2020/05/27 Python
Python爬取12306车次信息代码详解
2020/08/12 Python
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
C#笔试题
2015/07/14 面试题
简述安装Slackware Linux系统的过程
2012/01/12 面试题
过滤器的用法
2013/10/08 面试题
经理助理岗位职责
2014/03/05 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
2014年信息中心工作总结
2014/12/17 职场文书
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers