Quill使用highlightjs做代码块高亮失效问题

先给出官方实例

<!-- Include your favorite highlight.js stylesheet -->
<link href="highlight.js/monokai-sublime.min.css" rel="stylesheet">

<!-- Include the highlight.js library -->
<script href="highlight.js"></script>

<script>
hljs.configure({   // optionally configure hljs
  languages: ['javascript', 'ruby', 'python']
});

var quill = new Quill('#editor', {
  modules: {
    syntax: true,              // Include syntax module
    toolbar: [['code-block']]  // Include button in toolbar
  },
  theme: 'snow'
});
</script>

按照官方实例没有任何高亮效果,测试结果如下
在这里插入图片描述
根据Highlightjs的官方文档显示 Highlightjs

  1. 默认情况下高亮 <pre><code> 标签内容
  2. 需要调用highlightBlock函数重新渲染<pre><code> 标签内容
document.addEventListener('DOMContentLoaded', (event) => {
  document.querySelectorAll('pre code').forEach((block) => {
    hljs.highlightBlock(block);
  });
});

Quill使用highlightjs做代码块高亮失效的原因

  • 问题一
    Highlightjs自身不提供实时渲染,需要根据需求调用highlightBlock手动渲染。我添加了<button class="draw">draw</button> 监听点击事件调用highlightBlock渲染Quill的代码块;
    当然你也可以使用其他的监听方式…

  • 问题二
    Quill的代码块外层标签只有<pre>没有<code>,所以需要要更改渲染的标签对象;document.querySelectorAll('pre code')改为document.querySelectorAll('pre')

修改后的测试结果
在这里插入图片描述
完整测试代码如下

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<link href="https://cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">
	<link href="http://cdn.bootcss.com/highlight.js/8.0/styles/monokai_sublime.min.css" rel="stylesheet">  
</head>
<body>	
<div id="editor"></div>
<button class="draw">draw</button>
<script src="https://cdn.quilljs.com/1.3.6/quill.js"></script>
<script src="https://cdn.bootcss.com/highlight.js/9.15.8/highlight.min.js"></script>
<script>
	hljs.configure({
		languages: ['javascript', 'java', 'python']
	});
	document.getElementsByClassName('draw')[0].onclick=function(){
		document.querySelectorAll('pre').forEach((block) => {
			hljs.highlightBlock(block);
		})
	}
	var quill = new Quill('#editor', {
		theme: 'snow',
		modules: {
      		toolbar: [['code-block']]
    	}
	});
</script>
</body>
</html>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值