asciidoctor - highlight.js 不会突出显示来自 JavaScript 事件的标记加载
问题描述
当我在 html 中手动输入代码时,highlight.js 可以完美运行
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="asciidoc.css">
<link rel="stylesheet" href="pygments.css">
<link rel="stylesheet" href="highlightjs-theme.css">
</head>
<body>
<pre><code>
using System;
static void Main(string[] args)
{
// Display the number of command line arguments.
Console.WriteLine(args.Length);
}
</code></pre>
<script type="text/javascript" src="highlight.min.js"></script>
<script type="text/javascript">hljs.initHighlightingOnLoad();</script>
</body>
</html>
但是当我使用 asciidoctor.js 将标记转换为 html 荧光笔不适用于生成的 html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="asciidoc.css">
<link rel="stylesheet" href="pygments.css">
<link rel="stylesheet" href="highlightjs-theme.css">
</head>
<body>
<!-- static c# code-->
<pre><code class="csharp">
using System;
static void Main(string[] args)
{
// Display the number of command line arguments.
Console.WriteLine(args.Length);
}
</code></pre>
<textarea col=20 rows=3 id="raw_code" onkeyup="preview()"></textarea>
<!-- Dynamic c#-->
<div id="target"></div>
<script src="asciidoctor.min.js"></script>
<script type="text/javascript" src="highlight.min.js"></script>
<script type="text/javascript">
hljs.initHighlightingOnLoad();
function preview(){
var content = document.getElementById('raw_code').value
var asciidoctor = Asciidoctor();
const html = asciidoctor.convert(content,{doctype: 'article' ,safe: 'safe',header_footer: false, attributes: { 'source-highlighter': 'highlightjs' }})
document.getElementById('target').innerHTML = html;
}
</script>
</body>
</html>
上面代码后的结果 我们可以看到按键插入的代码没有高亮,但是页面加载时手动插入的代码是高亮的。
解决方案
您的调用是在 Asciidoc 标记转换为 HTML 之前进行的,因此 HTML 在其工作hljs.initHighlightingOnLoad()
时不在 DOM中。hljs
此外,您似乎希望hljs
在函数中包含对的调用,以便在textareapreview()
中的每个按键上都不会丢失语法突出显示:raw_code
function preview(){
var content = document.getElementById('raw_code').value
var asciidoctor = Asciidoctor();
const html = asciidoctor.convert(content, {
doctype: 'article',
safe: 'safe',
header_footer: false,
attributes: {
'source-highlighter': 'highlightjs'
}
})
var target = document.getElementById('target')
target.innerHTML = html
hljs.highlightBlock(target)
}
推荐阅读
- php - 没有警报消息,Ajax 成功不起作用
- redis - 我可以为 redis zset 定义自定义比较函数吗?
- java - 动态(重新)加载服务提供者模块
- d3.js - 在应用过渡之前停止绘制第一条路径的正确方法是什么?
- python - 如何使用 Python 从 Google 表格中获取特定的单元格值以用于不和谐机器人?
- python - 如何从python中的字符串中删除多次出现?
- python - 如何在网格搜索后绘制热图并找到决策树的最佳超参数
- google-forms - 提交 Google 表单后显示图片
- java - 线程不同步
- python - Flask-Dance:没有名为“flask_dance.consumer.backend”的模块