2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

google/code-prettify で<pre>の中身を動的に変更する

Posted at

概要

REST APIのテストフォームをつくるときなどに、コードをいい感じに色づけしてくれるgoogle/code-prettifyを使うととても見やすくなります。
本記事は、google/code-prettifyのコードスニペットと、つまづいた点のメモです。

google/code-prettifyのsrcから

  • prettify.js
  • run_prettify.js
  • prettify.css

を取得してください。下記のhtmlをブラウザで開くと動きます。
(jQueryはボタンのクリックイベントに使っています。必須ではありません。)

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Sample</title>
  <script src="lib/jquery-2.1.4.min.js"></script>
  <script src="lib/prettify.js"></script>
  <script src="lib/run_prettify.js"></script>
  <link type="text/css" rel="stylesheet" href="lib/prettify.css">
</head>
<body>

  XML:
  <pre id="code" class="prettyprint lang-xml">&lt;test attr=&quot;hello&quot; /&gt;</pre>
  <button id="get-script">Get</button>

  <script>
  $(document).ready(function() {
    prettyPrint();
    
    // ボタンが押されたら<pre>の中身を変更する
    $('#get-script').on('click', function() {
      $('#code').removeClass('prettyprinted');   // これが必要!!
      $('#code').text('<test attr="world" />');
      prettyPrint();
    });
    
  });
  </script>
</body>
</html>

このライブラリはprettyPrint()の呼び出しで<pre class="prettyprint>"要素のテキストにクラスを付加して色付けしています。したがって、テキストが変更された際には再度prettyPrint()の呼び出しが必要になります。

重要なのは、いったん色付けされたclass="prettyprint"の要素にはprettyprintedクラスが追加されているという点です。再度のprettyPrint()呼び出しを行う前に、このprettyprintedをクラスから削除しておかなければなりません。

これを行っているのが、コード中の//これが必要!!の行となります。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?