JavaScript一个生成文档目录的实例

执行结果:

<body>
	<script type="text/javascript">
		/**
 		* 这个模块注册一个可在页面加载完成后自动运行的匿名函数,当执行这个函数时会去文档中查找
 		* id为‘TOC‘的元素,如果这个元素不存在,就创建一个元素
 		*
 		* 生成的TOC目录应当具有自己的CSS样式,整个目录区域的样式className设置为“TOCEntry”
 		* 同样我们为不同层级的目录标题定义不同的样式,<h1>标签生成标题
 		* className为“TOCLevel1”,<h2>标签生成的标题className为“TOCLevel2”,以此类推
 		* 段编号的样式为"TOCSectNum"
 		*
 		* css代码的随后一行表示每个段编号之后都会有一个冒号和空格符,若要隐藏段编号,
 		* 请使用这行代码:
 		* .TOCSectNum{display:none;}
 		*
 		* 这个模块需要onLoad()工具函数
 		*/
 		window.onload = (function(){		//匿名函数定义了一个局部作用域
 			//查找TOC容器元素
 			//如果不存在,则在文档开头处创建一个
 			var toc = document.getElementById(‘TOC‘);
 			if(!toc){
 				toc = document.createElement("div");
 				toc.id = "TOC";
 				document.body.insertBefore(toc,document.body.firstChild);
 			}

 			//查找所有标题元素
 			var headings;
 			if(document.querySelectorAll){
 				headings = document.querySelectorAll("h1,h2,h3,h4,h5,h6");
 			}else{	//否则,查找方法稍微麻烦一些
 				headings = findHeadins(document.body,[]);
 			}

 			//递归遍历document的body,查找标题元素
 			function findHeadins(root,sects){
 				for(var c = root.firstChild; c!= null; c= c.nextSibling){
 					if(c.nodeType !== 1)
 						continue;
 					if(c.tagName.length === 2 && c.tagName.charAt(0) ==="H")
 						sects.push(c);
 					else
 						findHeadins(c,sects);
 				}
 				return sects;
 			}

 			//初始化一个数组来保持跟踪章节号
 			var sectioinNumbers = [0,0,0,0,0,0];

 			//现在,循环已找到的标题元素
 			for(var h = 0 ; h < headings.length ; h++ ){
 				var heading = headings[h];

 				//跳过在TOC容器中的标题元素
 				if(heading.parentNode == toc )
 					continue;

 				//判定标题的级别
 				var  level = parseInt( heading.tagName.charAt(1));
 				if( isNaN( level ) || level < 1 || level > 6 )
 					continue;

 				//对于该标题级别增加sectionNumbers对应的数字
 				//重置所有标题比级别低的数字为零
 				sectioinNumbers[level-1]++;
 				for(var i = level; i<6 ; i++)
 					sectioinNumbers[i] =0;

 				//现在,将所有标题级别的章节号组合产生一个章节号 如;2.3.1
 				var sectioinNumber = sectioinNumbers.slice(0,level).join(".");

 				//位标题级别增加章节号
 				//把数字放在<span>中,使得其可以用样式修饰
 				var span = document.createElement("span");
 				span.className = "TOCSectNum";
 				span.innerHTML = sectioinNumber ;
 				heading.insertBefore(span , heading.firstChild);

 				//用命名的锚点将标题包起来,以便为它增加链接
 				var anchor = document.createElement("a");
 				anchor.name = "TOC"+sectioinNumber;
 				heading.parentNode.insertBefore(anchor , heading);
 				anchor.appendChild(heading);

 				//现在为该节点创建一个链接
 				var link = document.createElement("a");
 				link.href = "#TOC"+sectioinNumber;		//链接的目标地址
 				link.innerHTML = heading.innerHTML;		//链接文本与标题一致

 				//将链接放在一个div中,div用基于级别的名字的样式修饰
 				var entry = document.createElement(‘div‘);
 				entry.className = "TOCEntry TOCLevel"+level;
 				entry.appendChild(link);

 				//该div添加到TOC容器中
 				toc.appendChild(entry);
 			}
 		});

	</script>
	<h1>这是h1</h1>
	<h2>这是h2</h2>
	<h3>这是h3</h3>
	<h1>这是h1</h1>
	<h4>这是h4</h4>
	<h5>这是h5</h5>
	<h6>这是h6</h6>
</body>

  

时间: 2024-10-10 17:52:27

JavaScript一个生成文档目录的实例的相关文章

前端那点事儿——Tocify自动生成文档目录

今天偶然间看到文档服务器有一个动态目录功能,点击目录能跳转到指定的位置:窗口滑动也能自动更新目录的焦点. 效果 框架 原来使用的是一个开源的jquery-ui控件——tocify.js,它可以遍历页面,把指定的DOM元素抽取出来形成目录.下载地址参考gitub : [gfranko/jquery.tocify.js] 开发者可以直接下载zip包使用,压缩包里面的内容包括: demos 演示页面(里面有一个google的链接,访问会超时,去掉即可) images 可以忽略 libs 额外使用的文件

利用 Gitbook 生成文档中心站点

利用 Gitbook 生成文档中心站点 经过一个多月,Bugtags 最近上线了自己的文档站点(docs.bugtags.com),在这里你可以找到 Bugtags 集成.使用相关的绝大部分问题. 在这之前我们使用的是第三方提供的帮助中心产品服务,在他们网站后台上面编辑文档内容,建立自己的文档体系的:但是用久了发现还是用很多不爽的地方,起码是不符合我们的习惯: 比如:该产品文档是使用富文本形式编辑和存储在数据库的:而我们自己都非常喜欢于用 Markdown 格式编写文档:而数据库保存也注定无法使

PhpDocumentor 生成文档

最近项目需要phpdoc生成文档,首先安装PhpDocumentor,利用pear安装: 切换用户: su root 安装PhpDocumentor: pear install PhpDocumentor 生成文档: Phpdoc –h 会得到一个phpDocumentor的详细参数列表.先看看最重要的几个吧. -d 这个目录代表着需要生成文档的原始php文件目录(注意是目录) -t 这个目录代表着生成的文档存放目录 -o 这个参数代表着生成的文档格式,例如html格式,参数就是 phpdoc

多模块Maven项目如何使用javadoc插件生成文档

需求 最近要对一个项目结构如下的Maven项目生成JavaDoc文档. Project |-- pom.xml |-- Module1 |   `-- pom.xml |-- Module2 |   `-- pom.xml |-- Module3 |-- pom.xml 这个就需要用到本文将要提出的一个Maven插件:javadoc. 基本使用 插件的基本配置很简单: <plugin> <groupId>org.apache.maven.plugins</groupId>

使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)

对于开发人员来说,构建一个消费应用程序时去了解各种各样的 API 是一个巨大的挑战.在你的 Web API 项目中使用 Swagger 的 .NET Core 封装 Swashbuckle 可以帮助你创建良好的文档和帮助页面. Swashbuckle 可以通过修改 Startup.cs 作为一组 NuGet 包方便的加入项目.Swashbuckle 是一个开源项目,为使用 ASP.NET Core MVC 构建的 Web APIs 生成 Swagger 文档.Swagger 是一个机器可读的 R

apidoc 生成文档

相关链接 :https://www.npmjs.com/package/apidoc 用apidoc可以生成文档, 预制条件: 1 项目根目录下新建一个文件:apidoc.json 2 项目目录下新建一个文件夹: doc apidoc -i example/ -o doc/ Creates from input files in example/ a documentation in path doc/.

使用文档生成器Doxygen为c#项目生成文档

文档生成器--Doxygen 一.简介 Doxygen是一种开源跨平台的,以类似JavaDoc(java开发环境自带的API文档生成工具)风格描述的文档系统,完全支持C.C++.Java.Objective-C和IDL语言,部分支持PHP.C#.注释的语法与Qt-Doc.KDoc和JavaDoc兼容.Doxgen可以从一套归档源文件(根据文件的形成规律和特点,保持文件之间的有机联系,区分不同价值,便于保管和利用的文件整理.)开始,生成HTML格式的在线类浏览器,或离线的LATEX.RTF参考手册

phpdoctor 安装,配置,生成文档

window 下安装phpdoctor 1 安装php,设置环境变量path ,把php 的安装路径加上,比如php 安装在d:/php5/ 2下载phpdoctor,可以去官网下载 http://peej.github.com/phpdoctor/,把下载的压缩包解压到任何地方 3配置phpdoctor,phpdoctor 最基本的配置 //源码路径,比如您的源码路径d:work/phptest,如下设置 source_path=“d:work/phptest” //生成的html 文档保存路

配置WCF同时支持WSDL和REST,swaggerwcf生成文档

配置WCF同时支持WSDL和REST,SwaggerWCF生成文档 VS创建一个WCF工程,通过NuGet添加SwaggerWcf 创建完成后通过 程序包管理控制台 pm>Install-Package SwaggerWcf 也可在 工具 -> NuGet包管理器 -> 管理解决方案的NuGet程序包 安装. 配置 首先对项目添加Global.asax文件,改动如下: protected void Application_Start(object sender, EventArgs e)