带有 Prettify 的自动 SyntaxHighlighter

Automatic SyntaxHighlighter with Prettify

在学校项目中我们创建了一个基于论坛的网站。我们正在使用 PageDown and Prettify 来处理文本。
但是就像现在一样,我们必须在代码上使用 <!--?prettify?--> 才能顺利地完成它,但是有什么方法可以告诉程序使用美化自动处理来自 PageDown 的所有 <pre> 标签吗?

自动 SyntaxHighlighter 有什么缺点吗?

1# 可能的解决方案,但不是我想要的:

您可以将 $("pre").addClass("prettyprint"); 添加到 javascript。此代码将为每个预标记提供 prettyprint class,但此短代码在 Markdown 预览中不起作用,因此对我来说这只是 50% 的解决方案。

2# 预览时可能的解决方案,但用户不友好:

我发现您可以调用函数 prettyPrint(); 来突出显示带有 class="prettyprint" 的所有 <pre> 标签。因此,如果我们将解决方案与此结合起来并添加一个 setInterval()(或类似 .click 的其他内容)来进行调用,我们将获得适用于 Markdown 预览的内容。我认为这种方式对用户不友好,因为它使用了大量的计算机功能(我认为),如果你仔细观察,你有时会在 <pre> 标签中看到一点点闪烁。
这是代码:

var timer = setInterval(prettytimer, 0);

function prettytimer() {
    $("pre").addClass("prettyprint");
    prettyPrint();
};

如果有人想知道为什么没有 .removeClass()hasClass() 检查,那是因为 .addClass() 没有添加相同的 class 两次。

3# 我寻求的解决方案:

这是我在预览处理程序站点和网页其余部分的解决方案 1# 中寻求的解决方案。可能有一些更好的方法,但这种方法会给你 Stack Overflow 的感觉。

var timer;

//If the code button have been pressed {}
$("#wmd-code-button").click(function () {
    clearTimeout(timer);
    timer = setTimeout(prettytimer, 3000);
});

//when on key have been released inside textarea
$(".wmd-input").on("keyup", function () {
    clearTimeout(timer);
    timer = setTimeout(prettytimer, 3000);
});

//If `timer` reach 3000 (3 seconds) execute this
function prettytimer() {
    $("pre").addClass("prettyprint");
    prettyPrint();
};

如果您使用的是 pageDown Markdown,则无需对此代码进行任何更改,只需将其复制到 javascript 文件中即可:)