我正在尝试使用Javascript代码修饰符,并提出了一个问题。

如果我没有在静态html中将class="prettyprint"分配给<pre>,但希望以后再应用prettyprint(例如,当用户单击我网页上的“colorize”按钮时),那么如何实现此目的?

可以稍微修改原始的run_prettify.js或prettify.js是可以接受的,因为我将其离线使用。

我的实验:

编写try-delay-class.html:

<html>
<head>
<script src="https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js"></script>
</head>
See it:
<pre>
class Voila {
public:
  // Voila
  static const string VOILA = "Voila";

  // will not interfere with embedded <a href="#voila1">tags</a>.
}
</pre>
</html>

在Chrome v26中打开,打开控制台,然后执行:
pres=document.getElementsByTagName('pre')
pres[0].className+=" prettyprint"

语法颜色不显示。

最佳答案

根据在这里找到的评论How to get prettyprint to work on dynamically generated dom element,我找到了出路。只需致电:

PR.prettyPrint()

顺便说一句:如果要删除代码颜色突出显示,则不能简单地将pre的类设置为空,然后再设置PR.prettyPrint()PR.prettyPrint()只能附加颜色标签,而不能删除它们。一种可行的方法是在应用prettyprint之前保存原始<pre>内容,然后在以后还原<pre>的内容。在我的帖子jQuery, how to clone back saved elements?中进行了验证。

关于javascript - 在run_prettify.js已加载后如何重新应用prettyPrint,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16127015/

10-15 22:33