js使用highlight.js高亮你的代码

在逛别人的博客的时候,看见别人的代码的例子使用了高亮的语法,无论是java,js还是PHP等等语言,都会自动的对关键字进行高亮。

于是在前几天自己写了一个博客,遇到code时,自然就想到了别人网站如何漂亮,巴拉巴拉。

开始了正式的捣鼓。

在捣鼓之前去别的网站看了看。这里贴上简书的效果

其中的关键字,方法名,字符串都有不同的颜色,虽然这个代码高亮得不是很好看,但还过得去。于是去看了看document,发现是这样的:

rush:xhtml;">
 (arams">name,age,sex) {
  .log(name+age+sex);
}

getPersonInfo(,,);

 (arams">args){
  .log(args.name+args.age+args.sex);
}
getPersonInfo({name:,age,sex:});

hljs??绝对就是这货了。于是找到了我们的主角:highlight.js。

highlight.js官网

highlightjs的用法可以直接在官网里look

这里我主要写下自己在使用过程中踩到些什么坑,以及最终的解决办法。

1.心急吃不了热豆腐,万事开头最是难

根据官网的doc,只需要三行代码就可以使用了,非常方便,自己写了个小demo测试了一下。还是很有效果的。

rush:js;"> nofollow" rel="stylesheet">

这里使用了bootstarp提供的cdn,可以直接通过上面的连接来访问cdn,选择需要的版本。就是那么简单。

这个配色也不是很好看。想要好看的配色可以直接在官网中参考。https://highlightjs.org/static/demo/

2.好用就要应用到实际开发中去

如此简单就可以应用非常的开心,于是应用到了项目中去。

结果遇到了大麻烦....

项目中使用了require.js来加载js,整个应用用的又是angular的框架。

如果直接这样写明显不符合规范,于是将代码变通一下,使用require.js来加载highlight.js。

在require.config增加highlight的路径配置

rush:plain;"> 'highlight':'http://cdn.bootcss.com/highlight.js/8.0/highlight.min',

在require的回调函数中执行hljs.initHighlightingOnLoad();

rush:js;"> require(loadList,function ($,angular) { $(function () { angular.bootstrap(document,['blogApp']); }); hljs.initHighlightingOnLoad(); });

css还是通过link,也可以使用less的@import加载,因为项目用了less,所以我选择了@import

rush:css;"> @import "/lib/highlight/styles/tomorrow-night-eighties.css";

然后在html页面一个code测试:

rush:xhtml;">
        cope.req.getArticle();
      $('pre code').each(function(i,block) {
        hljs.highlightBlock(block);
      });
    }
        
      
cloud blog by@ermu

然后打开浏览器一看:

灰常完美。

但是当使用了ng-bind-html,来显示后台返回的文档时:

代码完全不高亮了。仔细想想,

rush:js;"> hljs.initHighlightingOnLoad();

不就是onload的时候执行渲染么,也就是说,在此之后改变document都不会在执行了。所以很显然这样并不能高亮从接口取会来的文档的代码

google了一下,有一个叫angular-highlightjs 的东西,尝试了使用,但一直报错,官网上也没有什么说明文档

幸好代码托管到了github上面,于是去上面看了看,发现使用说明和官网一样短,issues上也没有人问这个问题,于是我问了一下,希望有人能解答:问题地址

我想highlight.js一定有提供对应的方法,在加载完成之后还可以执行一次,但无奈api文档是英文的,看得比较吃力,决定还是想别的法子。

最终解决问题的方法是接口返回使用highlight.js编译好的html,因为后端使用的是node,于是在cnode论坛上搜了一下,发现marked已经解决了这个问题。

只需要在marked的配置中添加highlight项即可(要先npm install highlight.js):

rush:js;"> var marked = require('marked'); var highlight = require('highlight.js'); marked.setoptions({ renderer: new marked.Renderer(),gfm: true,tables: true,breaks: false,pedantic: false,sanitize: false,smartLists: true,smartypants: false,highlight: function (code) { return highlight.highlightAuto(code).value; } });

返回的文档已经添加了对应的class。

rush:xhtml;">
 math = () ;
.increment = (arams">val) {
   math.add(val,)
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...