`

javascript之小应用-自动生成目录

阅读更多
这个例子描述了javascript对文档操作的很多概念:

·元素选取
·文档遍历
·元素创建
·元素属性设置
·插入新的节点元素




<!DOCTYPE html>
<html>
    <head>
         <style>
            #TOC { border: solid black 1px; margin: 10px; padding: 10px; }
            .TOCEntry { font-family: sans-serif; }
            .TOCEntry a { text-decoration: none; }
            .TOCLevel1 { font-size: 16pt; font-weight: bold; }
            .TOCLevel2 { font-size: 12pt; margin-left: .5in; }
            .TOCSectNum:after { content: ": "; }
        </style>
         <script type="text/javascript">
            function  toc() { // Anonymous function defines a local scope
                    // Find the TOC container element.
                    // If there isn't one, create one at the start of the document.
                    var toc = document.getElementById("TOC");
                    if (!toc) {
                        toc = document.createElement("div");
                        toc.id = "TOC";
                        document.body.insertBefore(toc, document.body.firstChild);
                    }

                    // Find all section heading elements
                    var headings;

                    if (document.querySelectorAll) // Can we do it the easy way?
                        headings = document.querySelectorAll("h1,h2,h3,h4,h5,h6");
                    else // Otherwise, find the headings the hard way
                        headings = findHeadings(document.body, []);
                    
                    // Recursively traverse the document body looking for headings
                    function findHeadings(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
                            findHeadings(c, sects);
                        }
                        return sects;
                    }
                    
                    // Initialize an array that keeps track of section numbers.
                    var sectionNumbers = [0,0,0,0,0,0];
                    
                    // Now loop through the section header elements we found.
                    for(var h = 0; h < headings.length; h++) {
                        var heading = headings[h];

                        // Skip the section heading if it is inside the TOC container.
                        if (heading.parentNode == toc) continue;

                        // Figure out what level heading it is.
                        var level = parseInt(heading.tagName.charAt(1));
                        if (isNaN(level) || level < 1 || level > 6) continue;
                        
                        // Increment the section number for this heading level
                        // and reset all lower heading level numbers to zero.
                        sectionNumbers[level-1]++;
                        for(var i = level; i < 6; i++) sectionNumbers[i] = 0;
                        
                        // Now combine section numbers for all heading levels
                        // to produce a section number like 2.3.1.
                        var sectionNumber = sectionNumbers.slice(0,level).join(".")
                        
                        // Add the section number to the section header title.
                        // We place the number in a <span> to make it styleable.
                        var span = document.createElement("span");
                        span.className = "TOCSectNum";
                        span.innerHTML = sectionNumber;
                        heading.insertBefore(span, heading.firstChild);

                        // Wrap the heading in a named anchor so we can link to it.
                        var anchor = document.createElement("a");
                        anchor.name = "TOC"+sectionNumber;
                        heading.parentNode.insertBefore(anchor, heading);
                        anchor.appendChild(heading);

                        // Now create a link to this section.
                        var link = document.createElement("a");
                        link.href = "#TOC" + sectionNumber; // Link destination
                        link.innerHTML = heading.innerHTML; // Link text is same as heading

                        // Place the link in a div that is styleable based on the level.
                        var entry = document.createElement("div");
                        entry.className = "TOCEntry TOCLevel" + level;
                        entry.appendChild(link);

                        // And add the div to the TOC container.
                        toc.appendChild(entry);
                    }
                };
        
          //  window.onload = toc;

        </script>
    </head>
    <body>
         <h1>h1</h1>
         <h2>h2</h2>
         
         <h1>h1</h1>
         <h2>h2</h2>
         <h2>h2</h2>
         
         <h1>h1</h1>
         
         <h1>h1</h1>         
         <h2>h2</h2>
         <h2>h2</h2>
         
         <h1>h1</h1>
         <h2>h2</h2>
         
         <input type="button" value="Click Me" onclick= "toc();"/>
         
         
    </body>
</html>


点击 Click Me 之前:


点击 Click Me 之后:






















-
  • 大小: 5 KB
  • 大小: 9.4 KB
分享到:
评论

相关推荐

    Front-End-JavaScript-Frameworks-Angular

    如果您更改任何源文件,该应用程序将自动重新加载。代码脚手架运行ng generate component component-name生成一个新的组件。 您还可以使用ng generate directive|pipe|service|class|guard|interface|enum|module ...

    JavaScript王者归来part.1 总数2

    图书目录  第一部分 概论  第1章 从零开始  1.1 为什么选择JavaScript?   1.2 JavaScript的应用范围   1.3 JavaScript的版本   1.4 一些值得留意的特性 禁忌及如何突破这些禁忌   1.5 安全性和执行效率...

    Windows JavaScript 库的 Visual Studio 扩展 v1.10.2官方版.zip

    WinJs库提供了一系列 CSS 样式、JavaScript 控件和实用工具,以帮助开发者迅速构建符合 Windows 应用商店 UX 基准要求的应用。WinJS 所提供的实用工具包含一系列功能,开发者可使用这些功能来在您的应用中创建自定义...

    程序天下:JavaScript实例自学手册

    9.10 表格按回车自动生成新行 9.11 单击单元格背景变色 9.12 单击表格某行后其他行隐藏 9.13 单击表头实现表格排序 9.14 单击单元格显示行的详细信息 9.15 表格设置为“100%”时获取表格的宽度 9.16 表格选中后变色 ...

    javascript完全学习手册2 源码

    目录 第1篇 JavaScript基础篇 第1章 JavaScript简介 1.1 JavaScript概述 1.1.1 什么是JavaScript 1.1.2 JavaScfipt的基本特点 1.1.3 常用的Web开发语言 1.2 JavaScript的应用 1.2.1 客户端应用 1.2.2 ...

    template-helper-apidocs:用于从代码注释自动生成 API 文档的模板助手。 这是基于 helper-apidocs,但专门用于使用模板库构建的应用程序

    用于从代码注释自动生成 API 文档的模板助手。 这是基于 helper-apidocs,但专门用于使用模板库构建的应用程序。 使用安装 $ npm i template-helper-apidocs --save 目录 作者 执照 (动词生成的目录) 文档 api...

    《程序天下:JavaScript实例自学手册》光盘源码

    9.10 表格按回车自动生成新行 9.11 单击单元格背景变色 9.12 单击表格某行后其他行隐藏 9.13 单击表头实现表格排序 9.14 单击单元格显示行的详细信息 9.15 表格设置为“100%”时获取表格的宽度 9.16 表格选中后变色 ...

    color-picker:一个简单的用纯JavaScript编写的颜色选择器应用程序,适用于现代浏览器

    颜色选择器一个简单的用纯JavaScript编写的颜色选择器应用程序,用于现代浏览器。 支持触摸事件。 敏感…敏感…贡献请不要通过编辑项目根目录中的文件来发出拉取请求。 它们是由构建工具自动生成的。 安装和 运行git...

    JavaScript网页特效范例宝典源码

    目录: 第1章 窗口/框架与导航条设计 1 1.1 弹出窗口控制 2 实例001 打开新窗口显示广告信息 2 实例002 定时打开窗口 4 实例003 通过按钮创建窗口 5 实例004 自动关闭的广告窗口 6 实例005 控制弹出窗口居中显示 7 ...

    ohmypet:《小宠爱》高校小程序开发应用赛西北赛区一等奖

    |-- dist 小程序运行代码目录(该目录由WePY的build指令自动编译生成,请不要直接修改该目录下的文件) |-- src | |-- assets 资源(图片、字体、样式)目录 | | |-- images 图片目录 | | `-- style 样式目录 | |-- ...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -优化Tree节点的NodeId自动生成,减少ViewState占用。 +2009-08-09 v2.0 beta5 +ExtAspNet和Asp.net的提交按钮兼容问题(feedback:千帆)。 -在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果...

    javaScript函数式编程

    目录 · · · · · · 第1章 JavaScript函数式编程简介1 1.1 JavaScript案例1 1.2 开始函数式编程4 1.2.1 为什么函数式编程很重要4 1.2.2 以函数为抽象单元7 1.2.3 封装和隐藏9 1.2.4 以函数为行为单位10 1.2.5 ...

    generator-pancakes:全栈JavaScript框架的Yeoman生成器

    使用这些生成器,您可以为Pancakes项目自动生成脚手架代码。 还没准备好黄金时间 截至2015年1月,我仍在研究框架的其余部分。 想法是拥有这个库,以便用户可以轻松地开始使用新的Pancakes应用程序,但是直到核心...

    korean-mad-libs:自动生成练习朝鲜语的句子卡片

    当您运行create-react-app ,它将始终使用最新版本的react-scripts创建项目,因此您将在新创建的应用程序中自动获得所有新功能和改进。 要将现有项目更新为新版本的react-scripts ,请 ,找到当前使用的版本(如果...

    JavaScript完全自学宝典 源代码

    示例描述:演示JavaScript的简单应用及JavaScript特效。 1.1.html 用JavaScript开发的弹出式“Hello World”实例。 1.2.html 在页面中输出的“Hello World”。 1.3.html 使用JavaScript进行文本框值的...

    employee-summary-generator:一个CLI应用程序,生成一个HTML文件,该文件以员工目录的形式显示每个用户输入的信息

    一个CLI应用程序,生成一个HTML文件,该文件以员工目录的形式显示每个用户输入的信息。 目录 安装 将app.js和package.json文件下载到本地系统。 然后在终端中,运行命令npm i以安装文件所需的依赖项。 安装依赖项后...

    Jugador-Api-Angular-Nodejs-Javascript

    如果您更改任何源文件,该应用程序将自动重新加载。代码脚手架运行ng generate component component-name生成一个新的组件。 您还可以使用ng generate directive|pipe|service|class|guard|interface|enum|module ...

    crescendo-javascript

    如果您更改任何源文件,该应用程序将自动重新加载。 代码脚手架 运行ng generate component component-name生成一个新的组件。 您还可以使用ng generate directive|pipe|service|class|guard|interface|enum|module...

    xdoclet-bin-1.2.1.zip

     正如《XDoclet in Action》部分章节中文版一文中所说的“当初,XDoclet因为可以自动生成EJB繁杂的接口和部署描述文件而声名鹊起。然而,现在的XDoclet已经发展成了一个全功能的、面向属性的代码生成框架。J2EE代码...

    xdoclet-base-locale-1.2.1.jar

     正如《XDoclet in Action》部分章节中文版一文中所说的“当初,XDoclet因为可以自动生成EJB繁杂的接口和部署描述文件而声名鹊起。然而,现在的XDoclet已经发展成了一个全功能的、面向属性的代码生成框架。J2EE代码...

Global site tag (gtag.js) - Google Analytics