根据文章H标签自动生成导航目录

本文介绍了一种使用jQuery根据文章内的H标签自动生成导航目录的方法。通过简单的代码实现,不仅提高了用户体验,还使得长篇文章的结构更加清晰。该方法适用于如旅游攻略等含有多个章节的文章。

原文地址http://www.santii.com/article/154.html

在一些旅游网站,比如说途牛、携程这些,当你看某条线路的详情页时,右边会有相应的第一天、第二天等的目录。

这么大的网站,不可能后台添加行程的时候,每一天都要自动写一个目录吧!

所以应该是自动生成的。

那么它是如何生成的呢?又是根据什么规则来生成的呢?

今天我们就来讲讲使用jquery,根据文章里面的H标签自动生成导航目录。

下面是完整实例代码,直接可用。

    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
    <title>jquery根据文章h标签自动生成导航目录</title>
    <script language="javascript" src="js/jquery-1.8.3.min.js"></script>
    <style>
    #content{padding-right:102px;}
    .menu{width:90px; background:#fff; border:1px #32c6c6 solid; border-radius:4px; position:fixed; right:0; padding:0 6px;}
    .menu a{width:100%; height:30px; line-height:30px; display:inline-block;}
    </style>
    <script>
    $(document).ready(function(e) {
    	$("#content").children().each(function(index, element) {
    		var tagName=$(this).get(0).tagName;
    		if(tagName.substr(0,1).toUpperCase()=="H"){  
    			var contentH=$(this).html();//获取内容
    			var markid="mark-"+tagName+"-"+index.toString();
    			$(this).attr("id",markid);//为当前h标签设置id
    			$(".menu").append("<a href='#"+markid+"'>"+contentH+"</a>");//在目标DIV中添加内容   
    		}  
    	});
    });
    </script>
    </head>

    <body>
    <div class="menu"></div>
    <div id="content">
    一路黔行,醉美贵州——黔西南、黔南游记
    <h2>摘要</h2>
    <div style="height:800px;">
    第一天抵达贵阳后,先游青岩古镇,后品酸汤鱼 宿:贵阳;第二天白天游览安顺黄果树后,晚上至黔西南州兴义入住;第三天游览完万峰林和马岭河大峡谷,返回安顺;第四天火车前往荔波游览,晚上住小七孔;第五天上午继续游玩小七孔,下午回到贵阳,晚上航班离开贵州。五天的贵州之行,完全采取坐火车坐班车的旅行方式,安排紧凑,由于第一次来到贵州,黄果树景区之大超出预期,加上火车晚点以及班车停开,虽最终均按计划走完行程,其中的曲曲折折,还是留下深刻的教训
    </div>
    <h3>第1天</h3>
    <div style="height:800px;">第1天内容</div>
    <h3>第2天</h3>
    <div style="height:800px;">第2天内容</div>
    <h3>第3天</h3>
    <div style="height:800px;">第3天内容</div>
    <h3>第4天</h3>
    <div style="height:800px;">第4天内容</div>
    <h3>第5天</h3>
    <div style="height:800px;">第5天内容</div>
    </div>
    </body>
    </html>

### 实现文章目录自动生成 为了实现在 `wangeditor` 中自动生成文章目录,可以采用多种技术手段。具体来说,在创建编辑器实例之后,可以通过获取编辑区域内的DOM元素并处理其中的标题标签(即H1至H6),进而构建出层次化的目录结构。 对于React环境下的实现方式,当初始化完成时可以在`created`生命周期事件里调用`editor.getEditableContainer()`函数取得整个可编辑区的内容容器[^1]: ```javascript import React from 'react'; import { Editor, Toolbar } from '@wangeditor/editor-for-react'; class MyEditor extends React.Component { constructor(props){ super(props); this.editorRef = React.createRef(); } componentDidMount(){ const editorInstance = this.editorRef.current.getInstance(); // 获取编辑器内部所有的 h 标签作为目录项 function generateCatalog(editorDom) { let catalogData = []; [...editorDom.querySelectorAll('h1,h2,h3,h4,h5,h6')].forEach((el,i)=>{ catalogData.push({ level : parseInt(el.tagName.replace(/H/, '')), text : el.innerText, id : `${i}`, // 可以设置为唯一ID用于定位 children: [] }); }); return catalogData; } editorInstance.onCreated(() => { setTimeout(()=>{ const editableArea = editorInstance.getEditableContainer(); console.log(generateCatalog(editableArea)); },0); }) } render() { return ( <> <Toolbar {...this.props.toolbarProps} /> <Editor ref={this.editorRef} onCreated={(editor)=>{}}/> </> ); } } ``` 上述代码片段展示了如何利用`querySelectorAll`选取所有级别的标题,并将其转换成适合展示于页面一侧或者顶部的导航列表形式。每一项都包含了级别(`level`)、文本内容(`text`)以及唯一的标识符(`id`)以便后续操作如点击链接平滑滚动到相应部分。 此外,如果是在Vue框架下工作,则可能涉及到更多关于响应式更新视图逻辑的设计。考虑到这一点,开发者通常会选择监听特定时机触发重新计算目录的方法,比如每当用户输入新内容后立即刷新侧边栏中的大纲显示[^2]。 值得注意的是,除了基本的功能外,还可以进一步优化用户体验,例如添加动画效果使得切换不同章节更加流畅自然;或是增强交互性让读者能够轻松折叠展开各个层级的小节等等[^3]。 最后提醒一点,无论在哪种前端库之上搭建此特性,都需要确保所使用的版本兼容最新API接口变化情况,以免造成不必要的麻烦[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值