js实现目录树

第一步:HTML结构

1 <div class="folderDiv">
2    <p>目录</p>
3    <ul class="folder"></ul>
4 </div>

第二步:CSS样式

1 /*目录树*/
2 .folderDiv {width: 14%;float: left;height: auto;overflow: auto;border:1px solid #ccc;border-top:2px solid #15a4fa;}
3 .folderDiv p{height: 25px;padding-left: 6px;line-height: 25px;}
4 .folderDiv .folder{width: 100%;height:396px;}
5 .folder li {list-style: none;}
6 .folder li span{display: inline-block;height: 25px;line-height: 25px;padding-left: 14px;font-size: 12px;white-space: nowrap;}
7 .folder li span:hover{cursor: pointer;}

第三步:JS函数

  1 //创建目录树
  2 folderAjax();
  3 //ajax请求
  4 function folderAjax() {
  5     var folder; //用于接收后台获取的目录树对象
  6     var folder_span; //ajax获取目录树下的所有span数量,最后赋值给folder_span_click
  7     var folder_span_click; //目录树点击
  8     $.ajax({
  9         type: "post",
 10         url: "/datawarning/warningCreate/getFolderInfoList ",
 11         async: true,
 12         success: function(res) {
 13             folder = res.beans; //当前目录树存在的对象
 14
 15             //重置目录树内容
 16             $(‘.folder‘).html(‘‘);
 17             var span = $(‘<span></span>‘)
 18             var li = $(‘<li></li>‘);
 19             li.append(span);
 20             $(‘.folder‘).append(li);
 21
 22             //获得目录树级数
 23             var folderLevelCode_Array = [];
 24             for(var i = 0; i < folder.length; i++) {
 25                 if(folderLevelCode_Array.indexOf(folder[i].folderLevelCode) == -1) {
 26                     folderLevelCode_Array.push(folder[i].folderLevelCode);
 27                 }
 28             }
 29
 30             /*按照目录级别排序后的数组*/
 31             function compare(property) {
 32                 return function(a, b) {
 33                     var value1 = a[property];
 34                     var value2 = b[property];
 35                     return value1 - value2;
 36                 }
 37             }
 38             /*目录级别排序排序*/
 39             folderLevelCode_Array.sort();
 40             //按目录层级排序目录树
 41             folder.sort(compare(‘folderLevelCode‘));
 42             //按目录ID排序目录树
 43             folder.sort(compare(‘folderId‘));
 44
 45             //设置父元素自定义属性作upperFolderId
 46             $(‘.folder‘).children(‘li‘).children(‘span‘).attr(‘data-folderId‘, folder[0].upperFolderId);
 47
 48             /*子目录级别计算*/
 49             for(var m = 0; m < folder.length; m++) {
 50                 //找到父级目录元素
 51                 var parent = $("[data-folderId=" + folder[m].upperFolderId + "]");
 52                 var span = $(‘<span></span>‘);
 53                 var ul = $(‘<ul></ul>‘);
 54                 ul.css(‘margin-left‘, 20 + ‘px‘).css(‘display‘, ‘none‘);
 55                 var li = $(‘<li></li>‘);
 56                 /*添加目录树信息*/
 57                 span.html(folder[m].folderName);
 58                 span.attr(‘data-folderId‘, folder[m].folderId);
 59                 span.attr(‘data-folderLevelCode‘, folder[m].folderLevelCode);
 60                 span.attr(‘data-upperFolderId‘, folder[m].upperFolderId);
 61                 li.append(span);
 62                 ul.append(li);
 63                 parent.parent().append(ul);
 64             }
 65
 66             //显示一级目录
 67             $(‘.folder‘).children(‘li‘).children(‘ul‘).css(‘display‘, ‘block‘);
 68             //获取所有span标签
 69             folder_span = $(‘.folder‘).find(‘span‘);
 70
 71             //去除第一个标签元素,从下标1开始循环
 72             for(var z = 1; z < folder_span.length; z++) {
 73                 if(folder_span.eq(z).parent().children().length >= 2) {
 74                     folder_span.eq(z).css(‘background‘, ‘url(src/assets/img/right_15a4fa_12px.png) no-repeat left center‘);
 75                     folder_span.eq(z).parent().parent().insertAfter(folder_span.eq(z).parent().parent().parent().parent().children(‘li‘).children(‘span‘)); //排序目录树
 76                 }
 77             }
 78
 79             //目录树样式设置
 80             $(‘.folder‘).children(‘li‘).children(‘span‘).css(‘display‘, ‘none‘)
 81             $(‘.folder‘).children(‘li‘).children(‘ul‘).css(‘margin-left‘, ‘5px‘)
 82             folder_span_click = folder_span;
 83
 84             //目录树点击
 85             folder_span_click.each(function(index, value) {
 86                 _this = $(this);
 87                 _this.click(function() {
 88                     if(_this.siblings(‘ul‘).children().length == 0) { //当前点击的span没有子元素
 89                         var treeParam = {}; //目录树请求对象---这是构建目录树的核心
 90                         treeParam.folderId = _this.attr(‘data-folderId‘);
 91                         //执行请求
 92                         $.ajax({
 93                             type: "get", //post,get
 94                             url: "", //请求地址
 95                             data: ‘treeParam‘, //请求数据
 96                             async: true, //true同步,false异步
 97                             success: function(res) {
 98                                 //请求成功执行函数
 99                             }
100                         });
101                         //其他span的变化
102                         $(‘.folder span‘).css(‘color‘, ‘#000‘);
103                         _this.css(‘color‘, ‘#15a4fa‘);
104                         _this.parent().parent().siblings(‘ul‘).find(‘ul‘).hide();
105                     } else { //当前点击的span拥有子元素
106                         if(_this.siblings(‘ul‘).is(‘:hidden‘)) {
107                             _this.parent().parent().siblings(‘ul‘).find(‘ul‘).hide(); //隐藏其他目录
108                             var ned = _this.parent().parent().siblings().children(‘li‘);
109                             _this.parent().parent().siblings(‘ul‘).find(‘span‘).siblings(‘ul‘).siblings(‘span‘).css(‘background‘, ‘url(src/assets/img/right_15a4fa_12px.png) no-repeat left center‘);
110                             $.each(ned, function(value, index) {
111                                 if(_this.children().length > 1) {
112                                     _this.children(‘span‘).css(‘background‘, ‘url(src/assets/img/right_15a4fa_12px.png) no-repeat left center‘);
113                                 }
114                             });
115                             _this.siblings(‘ul‘).css(‘display‘, ‘block‘);
116                             _this.css(‘background‘, ‘url(src/assets/img/down_15a4fa_12px.png) no-repeat left center‘);
117                         } else {
118                             _this.siblings(‘ul‘).css(‘display‘, ‘none‘);
119                             $(this).css(‘background‘, ‘url(src/assets/img/right_15a4fa_12px.png) no-repeat left center‘);
120                         }
121                     }
122                 })
123             })
124         }
125     })
126 }

第四步:效果



原文地址:https://www.cnblogs.com/webwrangler/p/8386230.html

时间: 2024-10-23 11:04:09

js实现目录树的相关文章

JS动态构建一棵目录树

JS动态构建一棵目录树 在使用frameset布局的时候,经常会用到目录树,我们可以把一棵树写死,但是更多的情况是,这棵树需要随时被改动,所以我们期望的是他能够被动态的构建. MVC,算是了解一点,那本文就把这棵树根据M-V-C给拆开分解吧. 点击链接demo→ 下面就来看看这棵树是怎么构建的. Module [数据层] var tree = { "id": 0, "a1": { "id": 1, "name": "

【Lua】Lua + LWT + ExtJS构建目录树

Lua处理后台逻辑,Lua lwt搭建后台程序,ExtJS根据后台传来的json数据构建目录树. 前台html和ExtJS代码不用多讲,直接上代码: treePanel.html 1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4 5 <title>ExtJS TreePanel</

利用jQuery无插件创建可扩展目录树

这是一个简单.轻量级的,基于jQuery的目录树.纯html代码. <html> <head> </head> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>   <script> $( document ).ready( function( ) {     $( '.t

显示目录树命令tree

-a:显示所有文件,包括隐藏文件 -d:只显示目录 -f:显示完整的文件名,包含路径 -L:显示目录树的深度 [[email protected] /]# tree -L 2 -a -f /home /home |-- /home/99user.ldif |-- /home/Legal | |-- /home/Legal/COPYRIGHT.txt | |-- /home/Legal/Entitlement_de.txt | |-- /home/Legal/Entitlement_es.txt

简单高效的asp.net目录树源代码

前台页面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Tree._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/

dTree无限级目录树和JQuery同步Ajax请求

以前都是用JQuery对树的支持来实现目录树的,近来闲来无事就弄了下dTree,感觉其无限级目录还是挺好的,而且它的使用也比较方便,基本上就是先把要用的js文件即dtree.js和css文件dtree.css引入,另外就是它默认的图片,当然这些图片都是可以自己指定的,它的css样式也可以自己改变的! 关于dTree就先谈谈它的node,dTree的node的构造方法可以指定下列参数, Js代码 id //唯一标识,数字型 pid//父节点的id,如果是根结点那就只能是-1,一般来讲只有一个最顶层

sublime text3怎么让左侧显示目录树

在前端开发中(包括Node.js开发),经常会使用sublime text,但之前一直不知道别人是怎么让左侧显示目录树,故特意在此记录一下. View ->Side Bar ->Show Side Bar,之后打开sublime text3程序,然后点击file->open folder打开你要显示的目录就行. 文章来源:https://www.zhihu.com/question/23427839 原文地址:https://www.cnblogs.com/flyingeagle/p/9

PHP读取目录树的实现方法分析_php技巧 - PHP

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 本文实例讲述了PHP读取目录树的实现方法.分享给大家供大家参考,具体如下: 前一阵时间面试XX公司笔试题中竟然有这样一道题: 使用PHP列出目录树! 当时一看就懵逼了!基本的思路还是有的,不过是使用递归算法,但对PHP操作目录文件的方法却不是很了解,所以今天好好补习一下! 解题思路: 1. 列出目录中的文件. 2. 判断是否是目录,如果是目录就继续递归. 3. 将所有文件名,存入多维数组 <?php function

python 小程序 复制目录树

1. 将一个目录树完全复制到另外一个目录下面 import os, sys """ 复制目录树 """ maxloadsize = 1024 * 1024 def copyfile(frompath, topath, maxloadsize= maxloadsize): """ 单个文件的复制 :param frompath:原文件 :param topath: 复制到的文件 :param maxloadsize: