Eswlnk Blog Eswlnk Blog
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈
  • 注册
  • 登录
首页 › 代码发布 › 「主题改造」Typecho使用highlight.js代码高亮实现代码行号

「主题改造」Typecho使用highlight.js代码高亮实现代码行号

Eswlnk的头像
Eswlnk
2024-04-04 17:03:41
「主题改造」Typecho使用highlight.js代码高亮实现代码行号-Eswlnk Blog
智能摘要 AI
本文介绍了如何在博客中实现代码高亮并添加行号。首先,使用highlight.js对代码进行高亮处理,确保不会产生解析冲突。接着,通过编写一个函数`addLineNumber`,将每行代码包裹在一个带有行号data属性的span标签中,并更新DOM。最后,添加CSS样式美化行号,使其居中显示且不可选中。此方法适用于大多数代码展示需求,但需注意行号宽度的调整以适应大量代码行数的情况。

前言

自开始写博客主题以来,代码高亮的行号问题一直让我颇为头疼。记得初学前端时,我曾尝试过一些方法,比如利用代码行的固定高度来创建一个伪元素,并通过脚本生成大量行号内容,然后利用内容溢出剪切来实现行号。不过最近,我注意到一些博客主题开始增加了代码行号,这让我又燃起了研究这个功能的兴趣。

「主题改造」Typecho使用highlight.js代码高亮实现代码行号-Eswlnk Blog

教程

首先,我们需要确保代码已经被highlight.js进行了高亮处理,这样可以避免在添加行号时产生解析冲突。

highlight.js的基本使用如下:

import hljs from 'highlight.js';
import javascript from 'highlight.js/lib/languages/javascript';

// 注册代码语言解析
hljs.registerLanguage('javascript', javascript);

// 对DOM元素进行代码高亮
document.addEventListener('DOMContentLoaded', (event) => {
  document.querySelectorAll('pre code').forEach((el) => {
    hljs.highlightElement(el);
  });
});

接下来,我们观察了一些已经实现代码行号的网页的HTML结构,发现它们给每行代码都添加了一个带有自定义data属性的span标签,该属性的值即为行号。

基于这个发现,我们可以编写一个函数来添加行号:

function addLineNumber(codeDom) {
  codeDom.classList.add("code-block-extension-code-show-num");
  const codeHtml = codeDom.innerHTML;
  const lines = codeHtml
    .split("\n")
    .map((line, index) => {
      return `<span class="code-block-extension-code-line" data-line-num="${index + 1}">${line}</span>`;
    })
    .join("\n");
  codeDom.innerHTML = lines;
}

这个函数首先获取到代码的HTML文本,然后通过split(“\n”)将其转换成数组。这样,数组中的每个元素就代表一行代码。接着,我们使用map函数遍历数组,并为每一行代码添加一个带有行号data属性的span标签。最后,我们使用join将数组重新转换成HTML文本,并更新DOM。

接下来,我们添加一些CSS样式来美化行号:

.code-block-extension-code-line {
  background-color: inherit;
}

.code-block-extension-code-line::before {
  content: attr(data-line-num);
  color: gray;
  user-select: none;
  background-color: inherit;
  text-align: center;
  display: inline-block;
  width: 18px;
  padding: 0 10px;
  box-sizing: content-box;
  position: sticky;
  left: 0;
}

这种方法基本上可以满足大部分代码展示的需求。不过需要注意的是,行号的宽度是固定的18px,如果你的代码行数非常多,可能需要调整这个宽度。

本站默认网盘访问密码:1166
本站默认网盘访问密码:1166
声明:本站原创文章文字版权归本站所有,转载务必注明作者和出处;本站转载文章仅仅代表原作者观点,不代表本站立场,图文版权归原作者所有。如有侵权,请联系我们删除。
WordPress代码高亮
22
1
Eswlnk的头像
Eswlnk
一个有点倒霉的研究牲站长
赞赏
「技术教程」如何在项目中使用一个自定义的npm模块 | 如何使用一个魔改后的npm模块
上一篇
「WordPress开发」资源展示小区块,可用于展示插件/主题
下一篇

评论 (1)

请登录以参与评论
现在登录
  • 的头像
    Eswlnk

    Typecho使用highlight.js代码高亮实现代码行号

    2 年前 • 111.6.*.* • Google Chrome Windows • 回复

猜你喜欢

  • 插件分享:新增自助购买卡密功能
  • 小工具开发之EdgeOne免费计划兑换工具
  • 主题改造计划:手动模块化网站首页
  • 「插件分享」WP Migrate DB Pro | WordPress数据一键迁移工具
  • 「日志记录」逆向必应翻译网页版API实现免费调用
Eswlnk的头像

Eswlnk

一个有点倒霉的研究牲站长
1108
文章
319
评论
679
获赞

随便看看

WordPress开发日志:利用Ajax添加文章页自动推送并显示推送结果
2021-11-25 23:59:28
「WordPress插件」WP Fluent Forms Pro |WordPress商业表单插件
2022-09-05 0:02:03
UiPress PRO v2.3.0.2[已激活汉化版]|原 WP Admin 2020|WordPress仪表盘美化插件
2022-03-07 0:31:43

专题展示

WordPress53

工程实践37

热门标签

360 AI API CDN java linux Nginx PDF PHP python SEO Windows WordPress 云服务器 云服务器知识 代码 免费 安全 安卓 工具 开发日志 微信 微软 手机 插件 攻防 攻防对抗 教程 日志 渗透分析 源码 漏洞 电脑 破解 系统 编程 网站优化 网络 网络安全 脚本 苹果 谷歌 软件 运维 逆向
  • 首页
  • 知识库
  • 地图
Copyright © 2023-2025 Eswlnk Blog. Designed by XiaoWu.
本站CDN由 壹盾安全 提供高防CDN安全防护服务
蜀ICP备20002650号-10
页面生成用时 1.011 秒   |  SQL查询 29 次
本站勉强运行:
友情链接: Eswlnk Blog 网站渗透 倦意博客 特资啦!个人资源分享站 祭夜博客 iBAAO壹宝头条
  • WordPress142
  • 网络安全64
  • 漏洞52
  • 软件52
  • 安全48
现在登录
  • 资源
    • 精彩视频
    • 破解专区
      • WHMCS
      • WordPress主题
      • WordPress插件
    • 其他分享
    • 极惠VPS
    • PDF资源
  • 关于我
    • 论文阅读
    • 关于本站
    • 通知
    • 左邻右舍
    • 玩物志趣
    • 日志
    • 专题
  • 热议话题
    • 游戏资讯
  • 红黑
    • 渗透分析
    • 攻防对抗
    • 代码发布
  • 自主研发
    • 知识库
    • 插件
      • ToolBox
      • HotSpot AI 热点创作
    • 区块
    • 快乐屋
    • 卡密
  • 乱步
    • 文章榜单
    • 热门标签
  • 问答中心反馈