MENU
  • 友情链接FRIENDS
  • 关于ABOUT
    • 个人证书
    • Uptime Status
  • RSS 订阅RSS FEEDS
  • 隐私政策POLICY
目录
CircleCrop Blog
  • 友情链接FRIENDS
  • 关于ABOUT
    • 个人证书
    • Uptime Status
  • RSS 订阅RSS FEEDS
  • 隐私政策POLICY
CircleCrop Blog
  • 友情链接FRIENDS
  • 关于ABOUT
    • 个人证书
    • Uptime Status
  • RSS 订阅RSS FEEDS
  • 隐私政策POLICY

PrismJS 代码块允许 HTML 标记

2023 5/13
技术分享
WordPress 教程
keywords: prismjs 代码 html标记 js 斜体 粗体 删除线 下划线

Prismjs 引入后会忽略所有 HTML 标记,包括粗体 <strong> </strong> 斜体 <em> </em> 下划线 <u> </u> 删除线 <s> </s> 。但有时我们可能需要用 HTML 标记来突出显示注释等内容,像这样:

print('Hello,World')
#print hello word

在 Prism.js 文件末尾添加以下代码解决:

!(function () {
  if (!self.Prism) {
    return;
  }
  var div = document.createElement("div");
  Prism.hooks.add("before-highlight", function (env) {
    var elt = env.element;
    if (
      !elt.hasAttribute("data-keep-tags") &&
      elt.parentNode.tagName.toLowerCase() === "pre"
    ) {
      elt = elt.parentNode;
    }
    env.keepTags = true;
    env.keepTagsPlaceholder = "___KEEPTAGS{n}___";
    var tags_regex = /<(strong|em|u|s)>([\s\S]*?)<\/\1>/g;
    env.keepTagsRegex = tags_regex;
    env.tokenStack = [];
    env.backupCode = env.code;
    var code = env.element.innerHTML;
    code = code.replace(tags_regex, function (match) {
      env.tokenStack.push(match);
      return env.keepTagsPlaceholder.replace("{n}", env.tokenStack.length);
    });
    env.element.innerHTML = code;
    code = env.element.textContent;
    code = code.replace(/^(?:\r?\n|\r)/, "");
    env.code = code;
  });
  Prism.hooks.add("after-highlight", function (env) {
    if (!env.keepTags) {
      return;
    }
    for (var i = 0, t; (t = env.tokenStack[i]); i++) {
      t = t.replace(env.keepTagsRegex, function (match, tag, inside) {
        div.innerHTML = inside;
        inside = div.textContent;
        return (
          "<" +
          tag +
          ">" +
          Prism.highlight(inside, env.grammar, env.language) +
          "</" +
          tag +
          ">"
        );
      });
      env.highlightedCode = env.highlightedCode.replace(
        env.keepTagsPlaceholder.replace("{n}", i + 1),
        t
      );
      env.element.innerHTML = env.highlightedCode;
    }
  });
})();

Cover: Martin Vorel, CC BY-SA 4.0 https://creativecommons.org/licenses/by-sa/4.0, via Wikimedia Commons

技术分享
WordPress 教程

评论

发表评论 取消回复


CircleCrop
舟遥遥以轻飏,风飘飘而吹衣。
问征夫以前路,恨晨光之熹微。
最新文章
  • プ口せ力冲榜纪念 ~傷だらけの手で、私達は~
    2024 年 12 月 10 日
  • 「プロセカ」Lv.29 FULL COMBO 达成~
    2024 年 11 月 21 日
  • 从零开始的 C# 学习笔记 ②:命令行贪吃蛇小游戏
    2024 年 11 月 20 日
目录
  1. Home
  2. 技术分享
  3. PrismJS 代码块允许 HTML 标记

苏 ICP 备 2024126770 号 | 苏公网安备 32050802012007 号

© 2023-2025 CircleCrop. All Rights Reserved.

Powered by WordPress.

除额外声明,本站内容非 AI 创作,采用 CC BY-NC-SA 4.0 协议共享。

Written by human, not by AI.

©

目录