给文章中的h标签生成目录结构(巧妙利用双向链表数据结构)
1.前言
例如在用富文本编辑器编辑文章的时候,会用到h标签来代表本段标题,那么h标签是有顺序的,例如:
h标签的顺序可能是这样的
h1
h1
h2
h3
h1
h3
h2
h4
那么目录结构就应该是
那么目录结构应该是
h2
h1
----h2
--------h3
h1
----h3
----h2
--------h4
2.案例如图:
本文就介绍如何使用js设计数据结构,巧妙利用双向链表实现将顺序的目录,转换成树状目录。
3.js代码
<script>
/**
* 链表节点信息
**/
function Node(data){
this.data=data;
this.next=null;
this.prev=null;
}
/**
* 双向链表数据结构
**/
function LinkedList(){
this.head=null;
this.tail=null;
/**
* 添加节点(添加的节点是尾节点)
**/
this.add=function(data){
var node=new Node(data);
if(this.head==null){
this.head=this.tail=node;
}else{
node.prev=this.tail;
this.tail.next=node;
this.tail=node;
}
}
/**
* 删除目标节点
**/
this.delete=function(node){
if(node==null){
return null;
}
if(node==this.head&&node==this.tail){
this.head=null;
this.tail=null;
}else if(node==this.head){
this.head=this.head.next;
this.head.prev=null;
}else if(node==this.tail){
this.tail=this.tail.prev;
this.tail.next=null;
}else{
node.prev.next=node.next;
node.next.prev=node.prev;
}
node.next=null;
node.prev=null;
return node;
}
}
/**
* 数据节点信息
**/
function createNode(name,level){
return {
name:name, //名称
level:level, //标签级别
child:new Array(), //标签子节点
};
}
/**
* 生成链表和树的组合结构
**/
function create(h,arr){
while(h!=null){
var li=new LinkedList();
while(h.next!=null){
if(h.next.data.level>h.data.level){
li.add(arr.delete(h.next).data)
}else {
break;
}
}
/**
* 递归生成子树
**/
create(li.head,li);
h.data.child=li;
h=h.next;
}
}
/**
* 将组合结构中的链表结构转换为数组结构
**/
function toArray(arr){
var a=new Array();
var h=arr.head;
while(h!=null){
if(h.data.child!=null){
h.data.child=toArray(h.data.child);
}
a.push(h.data);
h=h.next;
}
return a;
}
/**
* 模拟h标签
**/
var array=new LinkedList();
array.add(createNode("h2",2));
array.add(createNode("h3",3));
array.add(createNode("h2",2));
array.add(createNode("h1",1));
array.add(createNode("h3",3));
array.add(createNode("h2",2));
array.add(createNode("h2",2));
array.add(createNode("h3",3));
array.add(createNode("h3",3));
array.add(createNode("h4",4));
create(array.head,array);//生成树结构
var data=JSON.stringify(toArray(array));//转化json
/**
* 打印数据
**/
console.log(data)
</script>
本js只是模拟用顺序的h标签,生成树状的json数据结构,代码多处涉及递归算法
具体html+js+css实现请参考:http://jiajiajia.club/blog/artical/vSdf1Q/406
评论区
请写下您的评论...
猜你喜欢
blog
h标签生成目录结构实现点击定位平滑移动
前端(h5)
2124
1.生成树状目录结构基于上篇文章,模拟使用线性顺序的h标签生成了树状的目录结构,只是数据结构的变化,本文将使用实际案例,实现生成目录结构并实现点击定位平滑移动。2.案例点击目录结构的title,页面
javascript js html
1240
展示将文章中目标区域的h标签,生成目录结构具体代码下载下来看看吧~
数据结构与算法
1993
代码:数组a是未排序集合,已排序的集合是逻辑上的一个集合,可以看作是head,实现是一个双向链表,add方法向集合添加数据,每次找到对应的位置,使链表有序,toArray方法使已排序的集合输出成int数
数据结构与算法
1847
胜利者,求胜利者的编号,以及出局者的顺序。解决方案使用双向循环链表测试数据m=9,n=5输出:517436928代码(c++描述)Node.h#pragmaonceclassNode{public: i
blog
linux的目录结构
linux系统
5631
linux的目录结构/bin:/usr/bin:可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。/boot:放置linux系统启动时用到的一些文件。/boot/vmlinuz为
数据结构与算法
1764
prim(普里姆)算法求出。对于任何一个数据结构或算法,理解和实现只是一个方面,更重要的是要明白它的应用范围或应用场景,最小生成树算法的应用非常广泛,例如:假设要在n个城市之间建立通信联络网,则连接n个
blog
数据结构与算法-反转链表-递归法
数据结构与算法
8005
反转链表有一个单向链表t如下:t=1-2-3-4-5-6-7-8-9写一个方法反转链表t如下:1-2-3-4-5-6-7-8-9=tjava代码:packagetest;/*** 节点类
blog
数据结构-图的着色问题
数据结构与算法
12867
数据结构-图的着色问题问题描述:图的m-着色判定问题——给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色?个人感
最新发表
归档
2018-11
12
2018-12
33
2019-01
28
2019-02
28
2019-03
32
2019-04
27
2019-05
33
2019-06
6
2019-07
12
2019-08
12
2019-09
21
2019-10
8
2019-11
15
2019-12
25
2020-01
9
2020-02
5
2020-03
16
2020-04
4
2020-06
1
2020-07
7
2020-08
13
2020-09
9
2020-10
5
2020-12
3
2021-01
1
2021-02
5
2021-03
7
2021-04
4
2021-05
4
2021-06
1
2021-07
7
2021-08
2
2021-09
8
2021-10
9
2021-11
16
2021-12
14
2022-01
7
2022-05
1
2022-08
3
2022-09
2
2022-10
2
2022-12
5
2023-01
3
2023-02
1
2023-03
4
2023-04
2
2023-06
3
2023-07
4
2023-08
1
2023-10
1
2024-02
1
2024-03
1
2024-04
1
2024-08
1
标签
算法基础
linux
前端
c++
数据结构
框架
数据库
计算机基础
储备知识
java基础
ASM
其他
深入理解java虚拟机
nginx
git
消息中间件
搜索
maven
redis
docker
dubbo
vue
导入导出
软件使用
idea插件
协议
无聊的知识
jenkins
springboot
mqtt协议
keepalived
minio
mysql
ensp
网络基础
xxl-job
rabbitmq
haproxy
srs
音视频
webrtc
javascript
加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。