百度编辑器 UEditor 用 highlight.js 库实现代码高亮
发布时间:2021-03-06 17:00:02
来源:
https://highlightjs.org/download/
写个页面测试下先:(其中 monokai-sublime.css,是 sublime 编辑器的一种常用样式,styles 文件夹有很多不同的样式库,可以多换换,挑个自己喜欢的用)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>代码高亮demo</title> </head> <body> <!-- 引入css和js --> <link rel="stylesheet" type="text/css" href="./styles/monokai-sublime.css"> <script type="text/javascript" src="./highlight.pack.js"></script> <script>hljs.initHighlightingOnLoad();</script> <!--随便找断代码,放到<pre><code>***</code></pre>之间--> <pre> <code> $(document).ready(function(){ $("ul").each(function(){ var lis = $(this).find("li"); for(i in lis){ var li = lis[i]; console.log(i); if(i == 0){ $(li).addClass("num_0"); }else{ if(i % 4 == 0){ $(li).addClass("num_"+0); }else{ $(li).addClass("num_"+(i%4)); } } } }); }); </code> </pre> </body> </html>
highlight.js 代码高亮遵循的格式是:<pre><code>**</code></pre>,
而百度编辑器的代码语言模式生成的为 <pre>**</pre> 缺少 <code></code> 那一层,
所以还要在页面加一段 js,循环往 pre 标签里添加 code 标签。如下:
<script type="text/javascript"> var allpre = document.getElementsByTagName("pre"); for(i = 0; i < allpre.length; i++) { var onepre = document.getElementsByTagName("pre")[i]; var mycode = document.getElementsByTagName("pre")[i].innerHTML; onepre.innerHTML = '<code id="mycode">'+mycode+'</code>'; } </script>
至此,大功告成。
此外,还可以对代码块自定义 css,例如 white-space: pre; /*不强制换行*/ ,滚动条样式 scrollbar 等。
PJAX 支持】
<script> $(document).ready(hljs.initHighlighting); //回调插件 $(document).on('pjax:complete', function() { var allpre = document.getElementsByTagName("pre"); for(i = 0; i < allpre.length; i++) { var onepre = document.getElementsByTagName("pre")[i]; var mycode = document.getElementsByTagName("pre")[i].innerHTML; onepre.innerHTML = '<code id="mycode">'+mycode+'</code>'; }; //循环插入<code></code> $('pre code').each(function(i, block) { hljs.highlightBlock(block); }); //高亮代码 }); </script>