如何在动态加载 GitHub 代码后实现 Highlight.js 语法高亮
发布时间 - 2026-01-11 00:00:00 点击率:次highlight.js 默认只在页面加载时自动高亮已存在的代码块;若通过 fetch 异步插入代码,则需手动调用 `hljs.highlightelement()` 触发高亮,否则无法生效。
要在网页中对从 GitHub(或其他远程源)动态获取的代码实现语法高亮,关键在于理解 Highlight.js 的执行时机:它默认在 DOM 加载完成后立即扫描并高亮所有
元素。而通过 fetch 异步加载内容并写入 DOM 的操作发生在该扫描之后,因此新插入的代码不会被自动识别。✅ 正确做法是:在代码写入 DOM 后,显式调用 hljs.highlightElement() 对目标 元素进行手动高亮。
✅ 正确代码结构(含 HTML + JS)
⚠️ 注意事项
- 必须使用
包裹
:Highlight.js 依赖 容器保留换行与空格,仅 不足以正确渲染。
- *务必设置 `language-类名**:如class="powershell",否则highlightElement()` 无法推断语言(即使已加载 PowerShell 语法模块)。
- 避免重复初始化:不要在异步回调中再次调用 hljs.highlightAll() —— 它仅作用于初始 DOM,且可能引发性能问题或重复处理。
- 推荐使用 highlightElement() 而非 highlightAuto():前者更精准、高效,且支持显式语言指定;后者需额外传参且易误判。
✅ 补充:支持多语言的通用写法
若需根据文件扩展名自动设置语言类,可增强逻辑:
const url = "https://raw.githubusercontent.com/Ayanmullick/test/master/AutomationAcc/test1.ps1";
const ext = url.split('.').pop().toLowerCase();
const langMap = { ps1: 'powershell', js: 'javascript', py: 'python', md: 'markdown' };
const lang = langMap[ext] || 'plaintext';
codeEl.textContent = data;
codeEl.className = `language-${lang}`;
hljs.highlightElement(codeEl);通过以上方式,即可稳定、可靠地为任意远程加载的代码片段启用 Highlight.js 语法高亮,兼顾可维护性与专业体验。
# css
# javascript
# python
# java
# html
# js
# markdown
# git
# ajax
# github
# class
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在万网利用已有域名快速建站?
如何快速查询网站的真实建站时间?
如何快速搭建安全的FTP站点?
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
,南京靠谱的征婚网站?
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
android nfc常用标签读取总结
如何续费美橙建站之星域名及服务?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
phpredis提高消息队列的实时性方法(推荐)
php json中文编码为null的解决办法
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
WEB开发之注册页面验证码倒计时代码的实现
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
Laravel用户密码怎么加密_Laravel Hash门面使用教程
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
Laravel中的withCount方法怎么高效统计关联模型数量
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
如何快速搭建个人网站并优化SEO?
EditPlus中的正则表达式 实战(4)
Laravel如何实现API资源集合?(Resource Collection教程)
网站制作软件有哪些,制图软件有哪些?
七夕网站制作视频,七夕大促活动怎么报名?
C++时间戳转换成日期时间的步骤和示例代码
百度浏览器如何管理插件 百度浏览器插件管理方法
Laravel如何实现文件上传和存储?(本地与S3配置)
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
如何在阿里云ECS服务器部署织梦CMS网站?
Bootstrap整体框架之CSS12栅格系统
如何在七牛云存储上搭建网站并设置自定义域名?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
如何快速打造个性化非模板自助建站?
Laravel如何集成Inertia.js与Vue/React?(安装配置)
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
高端云建站费用究竟需要多少预算?
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
晋江文学城电脑版官网 晋江文学城网页版直接进入
Laravel如何实现API版本控制_Laravel版本化API设计方案

