首先需要引入jQuery哈!

1. 要求用下面的格式制作目录, 结构如下:
<ul>
<li>xxxx</li>
<li>xxxx</li>
<ul>
<li>xxxx</li>
<li>xxxx</li>
<ul>
<li>xxxx</li>
<li>xxxx</li>
</ul>
</ul>
</ul>
2. 要求带锚点的, 要使用父节点ID+锚点做为链接

1. 后台返回的数据:

const newDirList = [
{
"catalogId": 1,
"catalogFid": 0,
"catalogName": "目录",
"child": [],
"anchor": ""
},
{
"catalogId": 2,
"catalogFid": 0,
"catalogName": "版权信息",
"child": [],
"anchor": ""
},
{
"catalogId": 3,
"catalogFid": 0,
"catalogName": "第1章",
"child": [
{
"catalogId": 301,
"catalogFid": 3,
"catalogName": "第1章第1节",
"child": [
{"catalogId": 30101, "catalogFid": 301, "catalogName": "第1章第1节第1段", "child": [], "anchor": ""},
{"catalogId": 30102, "catalogFid": 301, "catalogName": "第1章第1节第2段", "child": [], "anchor": ""},
{"catalogId": 30103, "catalogFid": 301, "catalogName": "第1章第1节第3段", "child": [], "anchor": ""},
{"catalogId": 30104, "catalogFid": 301, "catalogName": "第1章第1节第4段", "child": [], "anchor": ""}
],
"anchor": ""
},
{
"catalogId": 302,
"catalogFid": 3,
"catalogName": "第1章第2节",
"child": [
{"catalogId": 30201, "catalogFid": 302, "catalogName": "第1章第2节第1段", "child": [], "anchor": "sec01"},
{"catalogId": 30202, "catalogFid": 302, "catalogName": "第1章第2节第2段", "child": [], "anchor": "sec02"},
{"catalogId": 30203, "catalogFid": 302, "catalogName": "第1章第2节第3段", "child": [], "anchor": "sec03"},
{"catalogId": 30204, "catalogFid": 302, "catalogName": "第1章第2节第4段", "child": [], "anchor": "sec04"}
],
"anchor": ""
},
{
"catalogId": 303,
"catalogFid": 3,
"catalogName": "第1章第3节",
"child": [],
"anchor": ""
},
{
"catalogId": 304,
"catalogFid": 3,
"catalogName": "第1章第4节",
"child": [],
"anchor": ""
},
{
"catalogId": 305,
"catalogFid": 3,
"catalogName": "第1章第5节",
"child": [],
"anchor": ""
}
],
"anchor": ""
},
{
"catalogId": 4,
"catalogFid": 0,
"catalogName": "第2章",
"child": [],
"anchor": ""
},
{
"catalogId": 6,
"catalogFid": 0,
"catalogName": "后记",
"child": [],
"anchor": ""
}
]

2. javaScrip:

 function genLi(name, catalogId, anchor, catalogFid) {
return `
<li>
<a href="${anchor?catalogFid:catalogId}.xhtml${anchor?'#'+anchor:''}">${name}(${anchor?catalogFid:catalogId}.xhtml${anchor?'#'+anchor:''})</a>
</li>
`.trim();
}
function loopArray (arr) {
let $ul = $('<ul>');
arr.forEach(function(v){
let $li = $(genLi(v.catalogName, v.catalogId, v.anchor, v.catalogFid));
$ul.append($li);
if (v.child && v.child.length) {
$ul.append(loopArray(v.child));
}
});
return $ul.get(0).outerHTML;
}
loopArray(newDirList);

3. 生成出的HTML代码:

<ul>
<li>
<a href="1.xhtml">目录(1.xhtml)</a>
</li>
<li>
<a href="2.xhtml">版权信息(2.xhtml)</a>
</li>
<li>
<a href="3.xhtml">第1章(3.xhtml)</a>
</li>
<ul>
<li>
<a href="301.xhtml">第1章第1节(301.xhtml)</a>
</li>
<ul>
<li>
<a href="30101.xhtml">第1章第1节第1段(30101.xhtml)</a>
</li>
<li>
<a href="30102.xhtml">第1章第1节第2段(30102.xhtml)</a>
</li>
<li>
<a href="30103.xhtml">第1章第1节第3段(30103.xhtml)</a>
</li>
<li>
<a href="30104.xhtml">第1章第1节第4段(30104.xhtml)</a>
</li>
</ul>
<li>
<a href="302.xhtml">第1章第2节(302.xhtml)</a>
</li>
<ul>
<li>
<a href="302.xhtml#sec01">第1章第2节第1段(302.xhtml#sec01)</a>
</li>
<li>
<a href="302.xhtml#sec02">第1章第2节第2段(302.xhtml#sec02)</a>
</li>
<ul>
<li>
<a href="3020201.xhtml">第1章第2节第2段第1行(3020201.xhtml)</a>
</li>
<li>
<a href="3020202.xhtml">第1章第2节第2段第2行(3020202.xhtml)</a>
</li>
<li>
<a href="3020203.xhtml">第1章第2节第2段第3行(3020203.xhtml)</a>
</li>
<li>
<a href="3020204.xhtml">第1章第2节第2段第4行(3020204.xhtml)</a>
</li>
</ul>
<li>
<a href="302.xhtml#sec03">第1章第2节第3段(302.xhtml#sec03)</a>
</li>
<li>
<a href="302.xhtml#sec04">第1章第2节第4段(302.xhtml#sec04)</a>
</li>
</ul>
<li>
<a href="303.xhtml">第1章第3节(303.xhtml)</a>
</li>
<li>
<a href="304.xhtml">第1章第4节(304.xhtml)</a>
</li>
<li>
<a href="305.xhtml">第1章第5节(305.xhtml)</a>
</li>
</ul>
<li>
<a href="4.xhtml">第2章(4.xhtml)</a>
</li>
<li>
<a href="6.xhtml">后记(6.xhtml)</a>
</li>
</ul>

根据返回数据, 迭代数组, 构造HTML结构的更多相关文章

  1. matlab学习笔记12_2创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段

    一起来学matlab-matlab学习笔记12 12_2 结构体 创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段 觉得有用的话 ...

  2. C语言实现使用动态数组来构造栈结构

    我在面前一篇博客<C语言实现使用静态数组来构造栈结构>中使用了静态数组来模拟栈的操作.静态数组的大小是在代码中写死的.是存储在用户栈上面的,使用起来不灵活.在这篇博客中我会使用动态数组来构 ...

  3. 013.CI4框架CodeIgniter数据库操作之:查询数据库,并让数据以数组的方式返回查询结果

    01. 我们在CI4框架中的Model文件夹新建一个User_model.php的文件,使用的是getResultArray,表示并让数据以数组的方式返回查询结果,代码如下: <?php nam ...

  4. carry-检查数据接口返回数据合法性

    问题背景: 在测试&部署监控过程中,我们常常会遇到外部接口返回数据不靠谱的时候.最常见的场合是从某个http获取如json和xml等结构化的结果,进行解析并处理,在这时候出现以下这几种常见类型 ...

  5. ListFiles():返回Files类型数组,可以用getName()来访问到文件名。

    List():显示文件的名(相对路径) ListFiles():返回Files类型数组,可以用getName()来访问到文件名. 使用isDirectory()和isFile()来判断究竟是文件还是目 ...

  6. NumPy来自现有数据的数组

    NumPy - 来自现有数据的数组 这一章中,我们会讨论如何从现有数据创建数组. numpy.asarray 此函数类似于numpy.array,除了它有较少的参数. 这个例程对于将 Python 序 ...

  7. JavaScript 构造树形结构的一种高效算法

    引言 我们经常会碰到树形数据结构,比如组织层级.省市县或者动植物分类等等数据.下面是一个树形结构的例子: 在实际应用中,比较常见的做法是将这些信息存储为下面的结构,特别是当存在1对多的父/子节点关系时 ...

  8. NumPy 基于已有数据创建数组

    原文:Python Numpy 教程 章节 Numpy 介绍 Numpy 安装 NumPy ndarray NumPy 数据类型 NumPy 数组创建 NumPy 基于已有数据创建数组 NumPy 基 ...

  9. pandas:数据迭代、函数应用

    1.数据迭代 1.1 迭代行 (1)df.iterrows() for index, row in df[0:5].iterrows(): #需要两个变量承接数据 print(row) print(& ...

随机推荐

  1. LC 980. Unique Paths III

    On a 2-dimensional grid, there are 4 types of squares: 1 represents the starting square.  There is e ...

  2. CentOS 7系统配置上的变化

    http://www.linuxidc.com/Linux/2014-09/107375p4.htm CentOS 7系统配置上的变化解析 ip ss指令替代 ifconfig route arp n ...

  3. Latex新手学习

    1.Latex 套装下载安装 http://www.ctex.org/CTeXDownload 选择镜像稳定版 下载安装后 2.一个简单的例子 (1)打开WinEdt (2)新建一个文档 \docum ...

  4. go 语言 interface{} 的易错点

    一,interface 介绍 如果说 goroutine 和 channel 是 go 语言并发的两大基石,那 interface 就是 go 语言类型抽象的关键.在实际项目中,几乎所有的数据结构最底 ...

  5. import、from 模块 import*、reload

    import 模块名.from 模块名 import* 均为导入模块,前者调用模块中函数或者变量时需要添加引用,即模块名.调用函数或者变量名 具体用法见下 https://jingyan.baidu. ...

  6. jupyterlab部署到docker

    操作环境:mac OS 10.14.6 docker版本:10.03.1 终端:iterm2 3.3 时间:2019年8月 ::说明::jupyter没有提供单独的jupyterlab镜像,可以使用j ...

  7. 【VS开发】CListCtrl控件使用方法总结

    CListCtrl控件使用方法总结 今天第一次用CListCtrl控件,遇到不少问题,查了许多资料,现将用到的一些东西总结如下: 以下未经说明,listctrl默认view 风格为report 相关类 ...

  8. vue 基础介绍

    0.MVVM 什么是MVVM?就是Model-View-ViewModel. ViewModel是Vue.js的核心,它是一个Vue实例. 1.基础示例 代码: <!DOCTYPE html&g ...

  9. ZOJ Problem Set - 1006

    注意:A的ascii为65,a为97就行了 其他没什么,略过. 代码参看: http://my.oschina.net/dianpaopao/blog/124545

  10. ssm框架的小总结

    一.mybatis框架 mybatis框架主要就是完成持久层的实现,简化了持久层的开发, 1.首先是配置文件的编写,我们这里就命名为mybatis-config.xml,先配置文件头,然后加载连接数据 ...