目录树设计

article/2025/7/30 13:57:27

目录树的内容,将使用 dtree 来构建。使用 dtree 后,设计的重点就不是树,而是树中节点的设计。节点设计的核心是节点 id 的设计,既要保证节点 id 的唯一性,还要 id 有明确的含义,并且永不重复。

事实上,对于节点设计的方案非常多,而对于这种树形结构,最合适的方案莫过于OID思想了。OID 在 SNMP 的 Mib 树中应用非常广泛,它可以为每个对象分配一个唯一的标识号。

在构建目录树时,可以按教程的每一节来构建节点,把章节号作为节点的 id。如,第一章的 id 是1,第 1.1 节的 id 是101,第 1.1.1 节的 id 是 10101,以此类推。这样,就可以确保 id 永不重复,并且含义一目了然,维护起来也很方便。

接下来说说 dtree,它是一个免费、开源的 Javascript 树形菜单,使用简单,界面也很专业。支持无限分级,可以在同一页面放置多个 dtree,可以为树的每个节点指定不同的图标。

更重要的是,dtree 是一个轻量级树形菜单,只有约 350 行 js 代码和 20 行 CSS 代码。由于是纯 js 的,所以兼容性好,在所有的浏览器下都工作得很好。并且,它只有 4 个 API,使用非常简单。接下来简单介绍一下 dtree 的使用方法。

首先,在HTML文档的头部引入 dtree 的 js 文件和 CSS 文件。

 
  1. <link href = "dtree.css" rel = "stylesheet"  />
  2. <script src = "dtree.js"></script>

其次,创建节点树。

使用构造函数 tree = new dTree(objName),来创建一个节点树 tree。参数 objName 为树的名字,可以是任意合法的字符串,该参数树只在构造函数中使用一次,以后就不再使用,可以不必关注。

dtree提供了一些默认图标,如果不喜欢,可以自己制作图标,并在 dtree.js 文件中,找到构造函数 dTree(objName),修改其中的 this.icon 属性,来重新配置。

再次,为节点树添加节点。

使用 tree.add(id, pid, name, url, title, target, icon, iconOpen, open) 这个 API,来为节点树 tree 添加节点。该 API 的各参数含义如下:

id:节点自身的 id,最顶层节点的 id 为 -1。

pid:父节点的 id。

name:节点的链接文本。

url:节点的链接地址。

title:鼠标放在节点上时的提示信息。

target:打开节点时的目标资源(如_blank,_self)。

icon:节点关闭时所显示图标的路径。

iconOpen:节点打开时所显示图标的路径。

open:布尔型,节点是否打开(默认为 false)。

大多数情况下,只需提供前 4 个参数,后面 5 个参数不必提供,使用默认值即可。如:

 
  1. tree = new dTree("content");
  2. tree.add(1, -1, "1 CSS基础", "http://www.waibo.wang/1/1.html");
  3. tree.add(101, 1, "1.1 CSS简介", "http://www.waibo.wang/1/1.1.1.html");
  4. tree.add(10101, 101, "1.1.1 认识CSS", "http://www.waibo.wang/1/1.1.1.html");
  5. tree.add(10102, 101, "1.1.2 CSS简史", "http://www.waibo.wang/1/1.1.2.html");
  6. tree.add(102, 1, "1.2 CSS开发环境", "http://www.waibo.wang/1/1.2.1.html");

最后,把节点树输出到页面。

上述过程只是在内存中创建了一个节点树,用户还无法看到。节点树创建完成后,还需要使用 document.write() 方法,把节点树输出到页面,用户才能看到。如:

 
  1. document.write(tree);

节点树创建完成,并输出到页面后,可以调用 tree.openTo(id, select) 方法打开指定的节点。其中,参数 id,表示要打开节点的 id;参数 select,表示打开节点时,是否选中该节点,默认值为 false。如果要选中,则使用 true。如:

 
  1. tree.openTo(10101,  true);

因为要在很多页面上使用目录树,为了使用方便,可以把上述创建节点树、为节点树添加节点、输出到页面、打开指定节点的操作,封装在一个函数中,再把该函数放到一个 js 文件中。在需要时,只需调用该函数即可。并且,整个目录树只需维护一个函数就够了。

 
  1. function createTree(id) {
  2.     tree = new dTree(“content”);
  3.    
  4.     document.write(tree);
  5.     tree.openTo(pid, true);
  6. }

在定义 createTree() 函数时,设置了一个参数 id,用来指定默认要打开的节点,以方便用户在创建节点树的同时,打开某个节点。在使用时,可以不提供该参数,表示创建节点树时,默认不打开任何节点,整个树处于折叠状态。

至此,目录树就全部创建完成。只需在HTML页面上调用 createTree(id) 函数,即可创建目录树,并打开指定的节点。如:

 
  1. <script>
  2.   createTree(10101);
  3. </script>

上述代码,调用 createTree(10101) 函数,表示创建目录树,并打开 id 为 10101 的节点,即打开 1.2 节。由于 createTree(id) 函数是 js 代码,需要在 script 元素中调用。运行结果如图 11‑6 所示:

dtree创建目录树图11-6 dtree创建目录树

关于作者

歪脖先生,十五年以上软件开发经验,酷爱Web开发,精通 HTML、CSS、JavaScript、jQuery、JSON、Python、Less、Bootstrap等,著有《HTML宝典》、《揭秘CSS》、《Less简明教程》、《JSON教程》、《Bootstrap2用户指南》、《Bootstrap3实用教程》,并全部在 GitHub 上开源。


http://chatgpt.dhexx.cn/article/U5w2rFZ6.shtml

相关文章

通过命令方式查看目录树

文章目录 一、Windows上查看目录树&#xff08;一&#xff09;查看当前目录的目录树&#xff08;二&#xff09;查看指定目录的目录树&#xff08;三&#xff09;保存目录树到文本文件 二、CentOS上查看目录树&#xff08;一&#xff09;安装tree程序&#xff08;二&#xff09…

java实现多层级目录树详解

一&#xff0c;引言 在开发中&#xff0c;经常遇到前端需要实现一个多层级的目录树&#xff0c;那么后端就需要根据这种结构返回对应的数据&#xff0c;因此在这里记录一下本人在开发中是如何实现这个多层级的目录树。 二&#xff0c;建表建库 在建表时&#xff0c;需要注意…

Linux系统目录树结构以及解释

FHS标准 Filesystem Hierarchy Standard&#xff08;文件系统层次化标准&#xff09;的缩写&#xff0c;多数Linux版本采用这种文件组织形式&#xff0c;类似于Windows操作系统中c盘的文件目录&#xff0c;FHS采用树形结构组织文件。FHS定义了系统中每个区域的用途、所需要的最…

目录树的构造

概述 ”树“在计算机的世界里是一个基本的数据结构&#xff0c;很多地方都能看到”树“的身影。最常见的应该是在各种软件和网页的菜单栏中&#xff0c;多层级的折叠其实就是以一棵树的形式进行展现的&#xff0c;如下图所示&#xff1a; 在树的层级和标签类别比较少&#xf…

兴安雪学运维之:目录树详解

极北之地&#xff0c;兴安之雪&#xff0c;老骥伏枥转战Linux运维&#xff0c;最近根据授课和大略看了FHS3.0&#xff0c;对Linux的目录有了初步的了解&#xff0c;怕人老忘性差&#xff0c;作以记录。 一、目录结构图 Linux的目录是一个倒置的树状结构&#xff0c;最顶层的目录…

【数据结构】B/B-树(目录树)

引言 关于B树的性质 一、B树的结构 二、B树的实现 #include<iostream> using namespace std; #if 1 //5分支Btree #define M 5 //奇数 #define MAXSIZE (M-1) //最多元素个数 #define MINSIZE (M/2) //最少元素个数 //B树 class Btree { public://关键码类型using KeyTy…

【Mybatis】Mybatis将String类型的0存到数据库中的number类型字段中,变成了空;

一、问题 Mybatis将String类型的0存到数据库中的number类型字段中&#xff0c;变成了空&#xff1b; 二、分析 自己写了一个自动写代码的脚本&#xff0c;带入springBatch后&#xff0c;读取文件时&#xff0c;少了序列号0-9的记录&#xff08;10笔一提交&#xff09;&#…

java取数据库number转String

2019独角兽企业重金招聘Python工程师标准>>> BigDecimal bigDecimal(BigDecimal)value; Long lbigDecimal.longValue(); String sbigDecimal.toString(); 转载于:https://my.oschina.net/u/2285090/blog/514110

字符串存入数据库date类型字段

有时候为了计算方便等原因需要将时间以date格式存入数据库&#xff0c;但是前台传过来的数据类型都是字符串&#xff0c;如果将字符串直接插入date类型的字段中会抛&#xff1a;ORA-01861: 文字与格式字符串不匹配。 前台页面有一个表单&#xff0c;如下所示&#xff1a; <…

2018年SCI论文--整合GEO数据挖掘完整复现 八 :STRING数据库构建蛋白质相互作用网络(PPI),cytoscape软件筛选hub基因

文章目录 论文地址STRING数据库PPI网络构建输入差异基因listPPI图保存结果 cytoscape软件筛选hub基因、功能模块输入“string_interactions”文件用cytohHubba插件&#xff0c;筛选top10 Hub基因生存分析用MCODE插件&#xff0c;筛选功能模块 论文地址 STRING数据库 PPI网络构…

string数据库使用和实践第三部分数据处理 流程-参数--后续分析

流程 1.首先要获取蛋白质列表&#xff08;单个/多个&#xff09; 格式&#xff1a;蛋白名称为一个占一行&#xff0c;或者氨基酸序列的通用格式。ID类别&#xff1a;可以为一种&#xff0c;可以为多种混合 2.在对应的数据框中输入蛋白质列表或者上传列表文件后&#xff0c;选择…

spring boot String类型json 存入数据库

效果图&#xff1a; 如图&#xff0c;string类型的json字符串&#xff0c;存入数据库&#xff0c;主要就是解析成map&#xff0c;遍历插入&#xff0c;不多说上干货&#xff1a; PostMapping(value "/currentConfig")public String saveSvConfig(RequestParam(&quo…

jpa @Convert list转String存入数据库

1.问题 list通过jpa直接存入数据库会报错这里需要进行转换 2.代码 1.dto对象 Entity Data Accessors(chain true) public class GameMatch {/*** 主键*/IdGeneratedValue(strategy GenerationType.IDENTITY)private Integer id;/*** 游戏id*/private Integer gameId;/*** …

string数据库使用和实践的第二部分网页展示http://string-db.org/

主页 protein-mode 该模式中&#xff0c;string数据库能够预测到特定物种中的某一个蛋白质的相互作用关系 通过该模式可以获取最多的特异性&#xff0c;但是覆盖面就会较小一些&#xff0c;原因是该模式中&#xff0c;string不会准确的去获取其他物种的直系同源物&#xff0c;取…

蛋白相互作用数据库,STRING使用指南

对于基因组数据分析而言的话&#xff0c;我们能用到网络分析的就是蛋白相互作用分析(protein-protein ineraction, PPI)分析了。 蛋白相互作用分析的数据库有很多&#xff0c;至于为什么选择STRING&#xff0c;还是在于其强大的可视化&#xff0c;以及自定义功能。这样我们可以…

五大常见的数据类型之 String

前言 我们都知道 Redis 提供了丰富的数据类型&#xff0c;常见的有五种&#xff1a;String&#xff08;字符串&#xff09;&#xff0c;Hash&#xff08;哈希&#xff09;&#xff0c;List&#xff08;列表&#xff09;&#xff0c;Set&#xff08;集合&#xff09;、Zset&…

数据库String字符串

char(n) varchar(n) tinyint tinytext text mediumtext longtextchar(0-255)varchar(0-21844) // 63533定长字符串 char()变长字符串 varchar(n) tinytext text mediumtext longtext(4GBtext)-- char varchar tinytext text mediumtext longtext -- 23767-1 21845-1 16383-1…

STRING:蛋白质相互作用(PPI网络)数据库简介

欢迎关注微信公众号《生信修炼手册》! 研究蛋白之间的相互作用网络&#xff0c;有助于挖掘核心的调控基因&#xff0c;目前已经有很多的蛋白质相互作用的数据库&#xff0c;而string绝对是其中覆盖的物种最多&#xff0c;相互作用信息做大的一个&#xff0c;网址如下 https://…

string数据库使用和实践第一部分string数据库介绍

背景 为什么要寻找蛋白质互做关系&#xff1f; 因为只有正确地发现和注释细胞中的所有功能性的相互作用关系&#xff0c;才能对细胞的功能进行系统层面的学习和理解。 大家在收集和展现蛋白质相互作用的信息上&#xff0c;一直在努力地跟上相互作用关系探索的步伐 近年来&#…

解决虚拟机桥接模式无法上网的问题

1.检查IP地址以及网关等信息是否正确 vim /etc/network/interfaces这里设置的是静态ip, auto lo iface lo inet loopback auto eth0 iface eth0 inet stastic address 192.168.43.40 # 设置IP netmask 255.255.255.0 # 设置子网掩码 gateway 192.168.43.19 # 设置网关 首先…