javascript - 使用 Markdown-it.js 和 Highlight.js 突出显示代码
问题描述
在当前示例中,将 Markdown 片段移植到 HTML,输出显示在 DIV(ID 内容)中。
高亮功能 (hljs.highlight) 设置为选项 markdown-it (md)。然而,这没有被执行。
我必须更改什么才能使输出使用 highlight.js?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@10.2.1/build/styles/default.min.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/markdown-it/11.0.1/markdown-it.min.js "></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.2.1/highlight.min.js"></script>
</head>
<body>
<div id="content"></div>
<script>
var md = window.markdownit();
md.set({
highlight: function (str, lang) {
if (lang && hljs.getLanguage(lang)) {
try {
return '<pre class="hljs"><code>' +
hljs.highlight(lang, str, true).value +
'</code></pre>';
} catch (__) {}
}
return '<pre class="hljs"><code>' + md.utils.escapeHtml(str) + '</code></pre>';
}
});
var result = md.render('# markdown-it rulezz! \n\n```html <pre><code class="js">function test();</code></pre>```');
document.getElementById('content').innerHTML = result;
</script>
</body>
</html>
解决方案
希望还不算太晚。
您必须在受保护的代码块\n
之后换行 () 。
所以这:
var result = md.render('# markdown-it rulezz! \n\n```html <pre><code class="js">function test();</code></pre>```');
应该:
var result = md.render('# markdown-it rulezz! \n\n ```html \n <pre><code class="js">function test();</code></pre>\n```');
一切都应该是这样的:
.js 文件应该是:
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/markdown-it/11.0.1/markdown-it.min.js "></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.2.1/highlight.min.js"></script>
这些都可以。
至于 .css,您可以使用您正在使用的那个,也可以使用 npm 中的那个:
npm install markdown-it-highlight
获取 .css 文件
node_modules/markdown-it-highlight/dist/index.css
,它具有更好的语法高亮颜色并使用它。然后您必须设置此
defaults
对象并将其设置在defaults.highlight
:var defaults = { html: false, // Enable HTML tags in source xhtmlOut: false, // Use '/' to close single tags (<br />) breaks: false, // Convert '\n' in paragraphs into <br> langPrefix: 'language-', // CSS language prefix for fenced blocks linkify: true, // autoconvert URL-like texts to links typographer: true, // Enable smartypants and other sweet transforms // options below are for demo only _highlight: true, // <= THIS IS WHAT YOU NEED _strict: false, _view: 'html' // html / src / debug }; // and then do this: defaults.highlight = function (str, lang) { var esc = md.utils.escapeHtml; console.log(str) console.log(lang) if (lang && hljs.getLanguage(lang)) { try { return '<pre class="hljs"><code>' + hljs.highlight(lang, str, true).value + '</code></pre>'; } catch (__) {} }else{ return '<pre class="hljs"><code>' + esc(str) + '</code></pre>'; } }; // now set the md: md = window.markdownit(defaults); // now this is where you forgot the line break after the fenced code block: const result = md.render('# markdown-it rulezz! \n ```html \n <pre><code class="js">function test();</code></pre>\n```'); document.querySelector('#content').innerHTML = result;
推荐阅读
- python - 我该如何解决这个问题?Python定义函数
- c# - c#中两列的数据集关系
- node.js - 将其他用户信息附加到 Firebase 推送
- python - 使 python3 包既可导入又可运行
- php - 如何在 mysql 中使用单个查询从两个表中获取数据
- arrays - 如何检查大小为 n 的序列是否首先单调递增,然后通过 n-1 次比较单调递减
- xaml - 更改网格 XAMARIN 上按钮的大小
- javascript - Angular 2 - 比较数组过滤器中的日期
- visual-studio - 如何在 C 代码中的 Visual Studio 中显示控制台输出(打印等)
- android - 匕首不生成文件