当前位置: 首页 > news >正文

【highlight.js】页面代码高亮插件

【highlight.js】

  很多博客都支持页面插入各种语言的代码,而这些代码肯定是有高亮设置的。那么在我们自己的页面上如何进行代码高亮设置?有现成的这个highlight.js插件我们可以使用。

  highlight.js的官网是【https://highlightjs.org/】可以去上面下载插件。如果习惯用cdn可以百度一下怎么用cdn的方法来引用相关文件,我这里就把这个包下载到本地来了。

■  简单用法

  简单的用法我们主要用到了highlight/highligh.pack.js这个js文件和highlight/styles/default.css这个CSS文件。另外复习一下基本的HTML知识的话,我们可以知道在一个HTML界面上插入计算机代码可以用<code>这个标签。不过这个标签仅仅是做了一些front和background的颜色上的设置。如果想让代码看着像代码而不是文本的话那么可以在code外面再套上一层<pre>标签。

  基于这样一种构想,我们构造出一个简单的java代码的高亮显示:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link href="highlight/styles/default.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
    <script src="highlight/highlight.pack.js"></script>
</head>
<body>
    <pre>
        <code class="java">
public class Test{
    public static void main(String args[]){
        System.out.println("Hello,World");
    }
}
        </code>
    </pre>
    <script>
        hljs.initHighlightingOnLoad();
    </script>
</body>
</html>

  得到的效果是:

  可以看到,在页面html中构建完相关的pre和code标签之后,还要在后面用js进行hljs.initHighlightOnLoad()这个操作才能使样式生效。另外别忘了pre的定义,pre里面的code一定要顶着行头写才能在显示的时候不会在前面空出一大截来。

  具体代码块按照哪种语言的格式进行高亮在code的class中决定。这里用class="java"来提示这个代码块是java代码,另外还支持html,xml,python,c++等等一众常见的格式。更多格式也可以到官网上看文档。

  ●  动态生成的代码块怎么办

  顾名思义,上面这个initHighlightOnLoad是在页面进行加载的时候运行才有效,如果是动态地在页面上加入一些新的代码块的话,那就很僵硬了,即便是在每次添加新内容之后马上执行一下这个函数也未必管用。(经试验,如果这个函数的作用有点像检测页面上所有需要highlight的code,记住他们的class,然后往页面的CSS中增加相应语言的高亮的CSS固化下来,所以如果页面之前有java为class的代码块然后再添加java代码块是可以做到仍然具有高亮,但是添加python为class的代码块就会不行了)。

  解决的办法是用其他方法来使得高亮生效。一个常见的办法是把下面这段代码加在插入“新代码块”的代码后面:

$('pre code').each(function(i,block){
    hljs.highlightBlock(block);
});

 

  each的参数函数中其实可以接受两个参数,第一个i是遍历的下标,第二个block则是遍历到的那个JQuery对象的html代码(也就是jQuery对象的[0]的值)。

   ●  其他CSS

  默认的代码高亮CSS有点丑,本来想自己去修改CSS,但是进到styles里面一看发现里面全是CSS,随便选一个都比default.css要好看些。自由选择即可!

 

 

转载于:https://www.cnblogs.com/franknihao/p/7602005.html

相关文章:

  • mxnet的训练过程——从python到C++
  • Nengo 神经网络
  • Linux正则和grep命令
  • Azure 中 Linux 虚拟机的大小
  • 【bzoj1758】[Wc2010]重建计划
  • ros 如何使用 openni2_launch
  • Git应用实践(二)
  • 软件项目管理第2次作业:豆瓣测评
  • 【个人训练】(POJ1276)Cash Machine
  • [转] logback 常用配置详解(序)logback 简介
  • 网络视频监控与人脸识别
  • 混合和过度绘制(图层性能 15.3)
  • 【u235】背单词
  • [置顶] 九月半集训总结
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • 分享一款快速APP功能测试工具
  • HTTP中的ETag在移动客户端的应用
  • Kibana配置logstash,报表一体化
  • Transformer-XL: Unleashing the Potential of Attention Models
  • uva 10370 Above Average
  • Vim Clutch | 面向脚踏板编程……
  • Vue 2.3、2.4 知识点小结
  • vue:响应原理
  • webpack4 一点通
  • 初探 Vue 生命周期和钩子函数
  • 复习Javascript专题(四):js中的深浅拷贝
  • 使用Swoole加速Laravel(正式环境中)
  • ​什么是bug?bug的源头在哪里?
  • ​水经微图Web1.5.0版即将上线
  • $.each()与$(selector).each()
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (04)odoo视图操作
  • (1)SpringCloud 整合Python
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (补)B+树一些思想
  • (二)PySpark3:SparkSQL编程
  • (二)springcloud实战之config配置中心
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (三分钟)速览传统边缘检测算子
  • (算法二)滑动窗口
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • *Django中的Ajax 纯js的书写样式1
  • ..回顾17,展望18
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET开发者必备的11款免费工具
  • .NET连接MongoDB数据库实例教程
  • .net下简单快捷的数值高低位切换
  • .NET学习教程二——.net基础定义+VS常用设置
  • [C#]扩展方法
  • [flink总结]什么是flink背压 ,有什么危害? 如何解决flink背压?flink如何保证端到端一致性?
  • [HNOI2018]排列
  • [IE编程] 了解Urlmon.dll和Wininet.dll
  • [iOS开发]iOS中TabBar中间按钮凸起的实现
  • [Jquery] 实现温度计动画效果