代码高亮,highlight.js的调用方法及其问题_weixin_33777877的博客-程序员秘密

技术标签: c/c++  

highlight.js是一个用来高亮代码的插件
下载地址:https://highlightjs.org/downl...
配色参考:https://highlightjs.org/stati...
使用方法:

<link rel="stylesheet" type="text/css" href="a11y-light.css">
    
<pre><code class="html">&lt;div&gt;你好&lt;/div&gt;
</code></pre>        

    <script src="highlight.pack.js"></script>
    <script>
        hljs.initHighlightingOnLoad();
    </script>

结果:
图片描述

可以看到使用highlight.js只需要三步:引入css、引入js、调用initHighlightingOnLoad函数。

有时候我们不想一出来就编译代码块,例如需要鼠标点击按钮然后在编译等。这时候调用initHighlightingOnLoad函数是发现不能够编译。可以自己试一下、onload中也不能编译。
这时候就可以调用initHighlighting函数。

    <script src="highlight.pack.js"></script>
    <script>
        window.onload = function () {
            hljs.initHighlighting();
        }
    </script>

但是,发现highlight只编译一次,如,想第一一次按钮编译一次,结果只有第一次编译了。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>测试</title>
    <link rel="stylesheet" type="text/css" href="a11y-light.css">
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .box {
            margin: 50px auto;
            width: 400px;
            border: 1px solid green;
        }
    </style>
</head>
<body>

    <div class='box'>
        <button id="changeBtn">改变</button>

        <div id="preBox"></div>
    </div>


    <script src="highlight.pack.js"></script>
    <script>
        // hljs.initHighlightingOnLoad();
        window.onload = function () {
            var oPreBox = document.getElementById('preBox');
            var oChangeBtn = document.getElementById('changeBtn');

            var idx = 0;

            var aPre = [
                `<pre><code class="html">&lt;div&gt;你好&lt;/div&gt;</code></pre>`,
                `<pre><code class="html">&lt;div&gt;大家好&lt;/div&gt;</code></pre>`
            ]

            changePre();

            oChangeBtn.onclick = function () {
                changePre();
            }

            function changePre () {
                if ( idx >= aPre.length ) {
                    idx = 0;
                }
                oPreBox.innerHTML = aPre[idx];

                hljs.initHighlighting();

                idx++;
            }
        }
        
    </script>
</body>
</html>

解决方法:源码中initHighlighting调用的是v函数,该函数使用v.called记录是否第一次编译,之后将v.called设置为了true,只要将'v.called = !0;'注释掉,就可以了。
图片描述
在点击按钮,之后就可以每一次都执行编译了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33777877/article/details/88686251

智能推荐

js replace 符号_iteye_3830的博客-程序员秘密

同样的问题,做个记录[code=&quot;java&quot;]var aa=&quot;aaa+++&quot;;aa.replace(/[+]/g,&quot;bbb&quot;);//输出aaabbb[/code]

Kubernetes存储架构和选型_rwx 和 rwo_琦彦的博客-程序员秘密

Kubernetes存储和选型基础知识容器的 Volume,其实就是将一个宿主机上的目录,跟一个容器里的目录绑定挂载在了一起。所谓的“持久化 Volume”,指的就是这个宿主机上的目录,具备“持久性”。即:这个目录里面的内容,既不会因为容器的删除而被清理掉,也不会跟当前的宿主机绑定。这样,当容器被重启或者在其他节点上重建出来之后,它仍然能够通过挂载这个 Volume,访问到这些内容。使用的 hostPath 和 emptyDir 类型的 Volume 并不具备这个特征:它们既有可能被 kubel

SpringBoot集成Mybatis-Plus增删改查_小虎哥的技术博客的博客-程序员秘密

上一篇“初识SpringBoot–入门SpringBoot”一、前言Mybatis:数据持久化框架Mybatis-Plus:对Mybatis进行了增强,它封装了基本的增删改查操作,使我们自己不需要再去写很多重复的代码,大大解放了生产力!二、创建项目创建成功后删除src下面的test目录三、目录结构四、pom.xml修改pom.xml内容如下&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;project xmlns="http://

Java中的13个原子操作类_talNot的博客-程序员秘密

Java从JDK 1.5开始提供了java.util.concurrent.atomic包(以下简称Atomic包),这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。因为变量的类型有很多种,所以在Atomic包里一共提供了13个类,属于4种类型的原子更新方式,分别是原子更新基本类型、原子更新数组、原子更新引用和原子更新属性(字段)。Atomic包里的类基本都...

中级PHP程序员应该掌握哪些技术?_php中级程序员需要掌握的技术_酷爱码的博客-程序员秘密

中级PHP程序员1.Linux能够流畅的使用Shell脚本来完成很多自动化的工作;awk/sed/perl 也操作的不错,能够完成很多文本处理和数据统计等工作;基本能够安装大 部分非特殊的Linux程序(包括各种库、包、第三方依赖等等,比如MongoDB/Redis/Sphinx/Luncene/SVN之类的);了解基 本的Linux服务,知道如何查看Linux的性能指标数据,知道基本的Lin...

随便推点

org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)_WxxCoder的博客-程序员秘密

Web页面报错500:org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)解决方案: 打开Project Structure 2.此时所有的jar包都到了lib下

Hibernate_Session核心方法_hibernate核心session_a2181745的博客-程序员秘密

1.Session的Save()方法会完成insert操作。将临时对象转化为持久化对象。/** * 1. save() 方法 * 1). 使一个临时对象变为持久化对象 * 2). 为对象分配 ID. * 3). 在 flush 缓存时会发送一条 INSERT 语句. * 4). 在 save 方法之前的 id 是无效的 * 5). 持久化对象的 ID 是不能被修改的

windows下zephyr-2.5.0操作系统学习--02-板级移植_Berte_Yu的博客-程序员秘密

板级移植zephyr的所支持的针对不同板子的层级创建app创建目录创建和拷贝文件修改文件修改CMakeLists.txt修改main.c使用自己定义的板子进行编译zephyr的所支持的针对不同板子的层级#mermaid-svg-aoNNhRrmwugVZdW8 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-

STM32 电机教程 22 - 基于ST MCLIB无感FOC算法变有感(HALL)FOC算法_st hall foc_jacksong2021的博客-程序员秘密

原文:STM32 电机教程 22 - 基于ST MCLIB无感FOC算法变有感(HALL)FOC算法前言磁场定向控制又称矢量控制(FOC),本质上为控制定子电流的幅度和相位,使之产生的磁场和转子的磁场正交,以产生最大的扭矩.PMSM的磁场定向控制框图如下图所示:第21讲对比分析了基于STMotorControl Workbench实现的单电阻FOC有感(hall)算法及单电阻FOC无感算法在代码上的具体差异,知道了其核心差异在MC_Task.C文件中对电机转子位置及转速计算...

docker的容器修改后保存及更新本地镜像_docker修改容器文件时镜像会变吗_AndyCheng_hgcc的博客-程序员秘密

http://www.ppzedu.com/archives/1062.htmldocker的容器修改后保存及更新本地镜像列出镜像:$ sudo docker images 1 $ sudo docker images 获取镜像:sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04...

C语言实现克鲁斯卡尔Kruskal算法求最小生成树(附完整源码)_给我打包一份三十块钱的外卖的博客-程序员秘密

Kruskal算法求最小生成树Edge结构体,Graph结构体Kruskal算法求最小生成树完整源码(定义,实现,main函数测试)Edge结构体,Graph结构体// a structure to represent a weighted edge in graphstruct Edge{ int src, dest, weight;};// a structure to represent a connected, undirected// and weighted graph

推荐文章

热门文章

相关标签