我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何使用JS动态构建目录树

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何使用JS动态构建目录树

本篇文章给大家分享的是有关如何使用JS动态构建目录树,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

在使用frameset布局的时候,经常会用到目录树,我们可以把一棵树写死,但是更多的情况是,这棵树需要随时被改动,所以我们期望的是他能够被动态的构建。

MVC,算是了解一点,那下面就把这棵树根据M-V-C给拆开分解吧。

如何使用JS动态构建目录树

下面就来看看这棵树是怎么构建的。

Module [数据层]

var tree = {            "id": 0,            "a1": {                "id": 1,                "name": "a1",                "children": {                    "b1": "b1_1",                    "b2": "b1_2",                    "b3": "b1_3"                }               },            "a2": {                "id": 1,                "name": "a2",                "children": {}            },            "a3": {                "id": 1,                "name": "a3",                "children": {                    "b1": "b3_1",                    "b2": "b3_2",                    "b3": "b3_3"                }            }        };

这是一颗两层的目录树,用ID来表示层级关系,name来表示改层的名字(也就是节点Text内容吧)。

Control [控制层]

var Tree = function ( module ){    function createNodeList( obj ) {        //创建ul节点和documentFragmeng中间变量        var n = document.createElement("ul"),            docfrag = document.createDocumentFragment();        //判断obj是根节点还是孩子节点        if(obj.id == 0) {            n.setAttribute("class", "tree_0");            for(var key in obj) {                if(key == "id") continue;                //将节点插入                var c = document.createElement("li"),                    span = document.createElement("span");                span.appendChild(document.createTextNode( obj[key].name ));                c.appendChild(span);                docfrag.appendChild( c );            }        }else if(obj.id && obj.id == 1) {            n.setAttribute("class", "tree_1");            for(var key in obj) {                if(key == "id" || key == "name" || !obj.children) continue;                for( var item in obj.children){                    //将节点插入                    var c = document.createElement("li");                    c.appendChild(document.createTextNode( obj.children[item] ));                    docfrag.appendChild( c );                }            }        }        n.appendChild( docfrag );        //返回开始构建的ul节点        return n;    }    //隐藏及显示 工具函数    function toggle(c){        c.style.display = ((c.style.display == "none") ? "" : "none");    }    function createTree( obj ) {        var root, child, count = 0;        root = createNodeList( obj );        for(var key in obj){            if(obj[key] == "id" || !obj[key].children) continue;            child = createNodeList(obj[key]);            root.children[count].appendChild( child );            //count来判断插入的位置            count++;        }        return root;    }    var T = createTree(module);    var list = T.children;    for(var i = 0, len = list.length; i < len; i++){        list[i].getElementsByTagName("span")[0].onclick = function(){            var obj = this.nextSibling;            toggle(obj);        }    }    return T;}

这里边创建了三个函数,其中

createNodeList() //适用于构建一个树子节点

其中使用documentFragment作为一个节点缓存器,先把节点放置到documentFragment中,然后统一插入到ul,这也是比较常用的使用方式。

createTree() //构建一棵树

基本整棵树的构建就是分为这两步,前者负责创建一个子节点,后者构建一棵树。

在这颗树中绑定了click事件,让其可以折叠,当然也可以在Tree这个类里绑定更多的方法,这个就靠自己发挥了。

View [视图层]

window.onload = function(){    var T = new Tree(tree);    document.getElementsByTagName("body")[0].appendChild(T);}

整棵树的构建,主要用到的是DOM元素的处理,这个必须牢牢掌握!

以上就是如何使用JS动态构建目录树,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何使用JS动态构建目录树

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何使用JS动态构建目录树

本篇文章给大家分享的是有关如何使用JS动态构建目录树,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在使用frameset布局的时候,经常会用到目录树,我们可以把一棵树写死,但是
2023-06-26

js如何使用动态键进行对象解构

这篇文章主要介绍了js如何使用动态键进行对象解构,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用动态键进行对象解构我们知道在对象解构时,可以使用 : 来对解构的属性进行重命
2023-06-27

Golang动态库使用指南:如何创建和使用动态库?

Golang是一种强大的编程语言,它不仅可以用于开发应用程序,还可以用于创建动态库。通过使用动态库,我们可以将一些常用的功能封装在库中,以便在不同的项目中重复使用。本文将介绍如何在Golang中创建和使用动态库,具体步骤如下:1. 创建动
Golang动态库使用指南:如何创建和使用动态库?
2024-02-29

如何使用Vue递归组件构建树形菜单

今天小编给大家分享一下如何使用Vue递归组件构建树形菜单的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在Vue.js中一个递
2023-07-04

如何使用shell创建日期目录

这篇文章主要介绍如何使用shell创建日期目录,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!需要在多个目录中 (如:beijing shanghai tianjin guangzhou 等等) 创建子目录(以年份命名
2023-06-09

怎么在Ubuntu系统上使用Samba4创建活动目录架构

这篇文章主要介绍“怎么在Ubuntu系统上使用Samba4创建活动目录架构”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么在Ubuntu系统上使用Samba4创建活动目录架构”文章能帮助大家解决问
2023-06-28

Python中如何对MySQL的表结构进行动态创建和修改?(使用Python如何动态地创建和修改MySQL的表结构?)

本文介绍了使用Python对MySQL表结构进行动态创建、修改和获取的方法。使用MySQLdb或pymysql库可通过执行SQL语句来实现上述操作。SQLAlchemyORM提供了另一种便捷的方式。通过获取表的元数据,可以动态获取表结构。最后,本文展示了使用SQLAlchemy动态创建、修改和删除表结构的示例代码。
Python中如何对MySQL的表结构进行动态创建和修改?(使用Python如何动态地创建和修改MySQL的表结构?)
2024-04-02

Spring MVC利用Swagger2如何构建动态RESTful API详解

前言本文主要给大家介绍了关于Spring MVC用Swagger2构建动态RESTful API的相关内容,当多终端(WEB/移动端)需要公用业务逻辑时,一般会构建 RESTful 风格的服务提供给多终端使用。为了减少与对应终端开发团队频繁
2023-05-30

如何使用 Golang 构建 RESTful API 并使用日志记录?

使用 golang 构建 restful api 时,可以采用以下步骤:创建路由,处理请求。启动 api。使用日志记录:配置日志记录。在 api 处理程序中使用日志记录。如何使用 Golang 构建 RESTful API 并使用日志记录
如何使用 Golang 构建 RESTful API 并使用日志记录?
2024-05-16

如何使用Windows 10的RSAT工具来管理Samba4活动目录架构

今天就跟大家聊聊有关如何使用Windows 10的RSAT工具来管理Samba4活动目录架构,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一旦 Windows 10 系统加入到 Sa
2023-06-28

linux中如何使用mkdir命令创建目录

linux中如何使用mkdir命令创建目录,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.命令格式:mkdir [选项] 目录...2.命令功能:通过 mkd
2023-06-13

C#如何使用表达式树动态更新类的属性值

本篇内容介绍了“C#如何使用表达式树动态更新类的属性值”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#的λ表达式树是一个好东
2023-06-26

如何使用Go构建一款静态分析工具

今天小编给大家分享一下如何使用Go构建一款静态分析工具的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。介 绍Owl是一款开源项
2023-07-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录