ng-bind-html 和 highlight.js
ng-bind-html and highlight.js
我正在尝试为动态添加的 html 中的所有代码元素获取语法突出显示,它将使用 ng-bind-html.
添加到当前页面
<div ng-repeat="activity in activities">
<h3>{{activity.title}}</h3>
<div ng-bind-html="activity.text">
</div>
</div>
activity.text
变量包含如下内容:
<p>This is a paragraph with some code following.</p>
<pre><code class="lang-python">
s = "Python syntax highlighting"
print s
</code></pre>
<p>some other HTML elements </p>
到目前为止这有效,但没有语法突出显示。所以我添加了 highlightjs 和 angular-highlightjs。我已将 <div ng-bind-html="activity.text">
更改为 <div hljs ng-bind-html="activity.text">
现在的问题是组合 ng-bind-html 和 hljs 指令没有按预期工作。
它不会将语法突出显示添加到代码标记(代码前),而是添加到整个 html 内容。
是否有更好的方法来为动态添加的内容获取语法高亮显示?
我通过在服务器端添加语法突出显示解决了我的问题(因为我也在服务器端进行降价翻译)。
我正在使用带有 expressjs 框架的 nodejs 作为后端。
在获取我的活动时,我通过查询参数 (f.e.GET /activities?hljs=true) 激活了 highlightjs。
对于每个 activity 我调用以下函数(它还不是完全干净的代码但它可以工作):
var cheerio = require('cheerio');
var hljs = require('highlight.js');
// ... express routes ...
var highlightPreCodeElements = function (htmlText) {
var $ = cheerio.load(htmlText);
$('pre code').each(function(i, block) {
if ($(this).attr('class') && $(this).attr('class').slice(0, 4) === 'lang') {
var indexOfMinus = $(this).attr('class').indexOf('-');
var language = $(this).attr('class').substr(indexOfMinus + 1);
$(this).html(hljs.highlight(language, $(this).text()).value);
}
});
return $.html();
};
如您所见,我在 nodejs 中为 jQuery-API 和 highlight.js (npm install highlight.js
).
使用 cheerio (npm install cheerio
)
在客户端,我只引用 highlightjs 样式表,仅此而已。
我正在尝试为动态添加的 html 中的所有代码元素获取语法突出显示,它将使用 ng-bind-html.
添加到当前页面<div ng-repeat="activity in activities">
<h3>{{activity.title}}</h3>
<div ng-bind-html="activity.text">
</div>
</div>
activity.text
变量包含如下内容:
<p>This is a paragraph with some code following.</p>
<pre><code class="lang-python">
s = "Python syntax highlighting"
print s
</code></pre>
<p>some other HTML elements </p>
到目前为止这有效,但没有语法突出显示。所以我添加了 highlightjs 和 angular-highlightjs。我已将 <div ng-bind-html="activity.text">
更改为 <div hljs ng-bind-html="activity.text">
现在的问题是组合 ng-bind-html 和 hljs 指令没有按预期工作。
它不会将语法突出显示添加到代码标记(代码前),而是添加到整个 html 内容。
是否有更好的方法来为动态添加的内容获取语法高亮显示?
我通过在服务器端添加语法突出显示解决了我的问题(因为我也在服务器端进行降价翻译)。 我正在使用带有 expressjs 框架的 nodejs 作为后端。
在获取我的活动时,我通过查询参数 (f.e.GET /activities?hljs=true) 激活了 highlightjs。 对于每个 activity 我调用以下函数(它还不是完全干净的代码但它可以工作):
var cheerio = require('cheerio');
var hljs = require('highlight.js');
// ... express routes ...
var highlightPreCodeElements = function (htmlText) {
var $ = cheerio.load(htmlText);
$('pre code').each(function(i, block) {
if ($(this).attr('class') && $(this).attr('class').slice(0, 4) === 'lang') {
var indexOfMinus = $(this).attr('class').indexOf('-');
var language = $(this).attr('class').substr(indexOfMinus + 1);
$(this).html(hljs.highlight(language, $(this).text()).value);
}
});
return $.html();
};
如您所见,我在 nodejs 中为 jQuery-API 和 highlight.js (npm install highlight.js
).
npm install cheerio
)
在客户端,我只引用 highlightjs 样式表,仅此而已。