Prism.js 是一个非常不错的用于处理网页中代码块的JavaScript库。然而,Prism.js嵌入zblog php之后,在使用了整站Ajax或者Pjax之后,自带的代码高亮插件Prism失效了,代码并没有实现高亮。需要再回调一次,强制Prism再次在当前页面运行,实现代码高亮效果。代码如下,(仅限于Zblog php)。具体是否有问题还有待测试。。。表面看上去是成功了的。
$(function () { var compatibility = { as3: "actionscript", "c#": "csharp", delphi: "pascal", html: "markup", xml: "markup", vb: "basic", js: "javascript", plain: "markdown", pl: "perl", ps: "powershell" }; var runFunction = function (doms, callback) { doms.each(function (index, unwrappedDom) { var dom = $(unwrappedDom); var codeDom = $("<code>"); if (callback) callback(dom); var languageClass = "prism-language-" + function (classObject) { if (classObject === null) return "markdown"; var className = classObject[1]; return compatibility[className] ? compatibility[className] : className }(dom.attr("class").match(/prism-language-([0-9a-zA-Z]+)/)); codeDom.html(dom.html()).addClass("prism-line-numbers").addClass(languageClass); dom.html("").addClass(languageClass).append(codeDom) }) }; runFunction($("pre.prism-highlight")); runFunction($('pre[class*="brush:"]'), function (preDom) { var original; if ((original = preDom.attr("class").match(/brush:([a-zA-Z0-9\#]+);/)) !== null) { preDom.get(0).className = "prism-highlight prism-language-" + original[1] } }); Prism.highlightAll() });