7

HTML のコード ブロックを強調表示するために、highlight.js を使用しています。highlight.js はすべてのコード ブロックを見つけて言語を自動的に決定できますが、要素と言語の両方を手動で指定したいと思います。言語を指定することで、それがどの言語であるかを判断するオーバーヘッドを回避したいと考えています (highlight.js は高速ですが、言語の検出をスキップすると高速になる可能性があります)。

HTML では、言語をクラスとして指定します (コード ブロックのスタイリングにこれが必要です)。

<pre>
<code class="python">
print "Hello"
</code>
</pre>

JavaScript では、コード要素を反復処理します (何らかの理由で、これらの要素のリストを取得する必要があります)。コード要素を繰り返し処理するときは、hljs.highlightBlock関数を呼び出します。私は (クラスとして保存されている) 言語を知っているので、強調表示する言語を実際に highlight.js に伝えると有利だと思います。

highlight.js Web サイトの使用例から、hljs.configure関数を呼び出して、試す言語のリストを指定できると推測しました。

// ...
if (codeElement.hasClass('python'))
    language = 'python';
else if (codeElement.hasClass('bash'))
    language = 'bash';

hljs.configure({languages: [language]});
hljs.highlightBlock(codeElement[0]);

ただし、これが正しい方法であるかどうかはわかりません。まず、これが信頼できる公式の API であるかどうかが明確ではありません。次に、highlight.js は、コード ブロックが指定された言語であるかどうかを判断しようとしていると思います (これは、最初に避けたかったことです)。

4

1 に答える 1

7

「コード前」要素を繰り返し処理していますか? しかし、「pre」タグではなく「code」タグで言語を指定しました。私は同じ問題を抱えていて、一番上の要素で言語を指定すると問題が解決しました。HTML コードは次のようになります。

<pre class="python">
<code>
print "Hello"
</code>
</pre>

また、使用しているhighlight.jsパックに「python」が含まれていることを確認してください:)

于 2017-01-27T22:36:17.210 に答える