在我的项目中的JQuery模板中,我试图写出一个不对HTML进行编码的HTML字符串变量。当我像这样输出变量时:
${description}
它导致原始HTML字符串输出标签,所有这些都是这样的:
<p>text <b>bold</b> <i>italic</i></p>
但是当我尝试将标记转换为代码中相同位置的真实标记时:
{{html $description}}
不输出任何内容!
我尝试了很多传递变量的方法,但我认为html例程中有一些事情我没有得到。
感谢。
更新
以下是它的调用方式:
this.$el.attr('data-id', tmplData.id).
data('id', tmplData.id).html($.tmpl(this.template, tmplData));
其中this.template是模板文件,tmplData是JSON,包括$ description和其他所需的变量。
另一次更新:
{{html '<p>string</p>'}}
表现得像预期的那样。但是
{{html $another_variable}}
即使$ another_variable中没有HTML,也无法产生任何输出。
另一次更新:
我也尝试过:
${$item.html(description)}
并将对模板的调用更改为
this.$el.attr('data-id', tmplData.id).
data('id', tmplData.id).
html($.tmpl(this.template, tmplData, {
truncate: _.truncateStrip,
html: _.html,
}));
并编写了一个自定义html例程,以便按照建议不变地传递字符串:
html: function(str) {
return str;
}
但仍然没有骰子。
答案 0 :(得分:13)
答案是:
{{html description}}
我很早就尝试过,但因为我在大括号内留下了杂散空间,所以它没有正确解释。
: - (
答案 1 :(得分:0)
如果打开源,则可以修改执行编码的行。我没有看到关闭它的选项,所以这可能是最简单的解决方案。
变化:
encode: function( text ) {
// Do HTML encoding replacing < > & and ' and " by corresponding entities.
return ("" + text).split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'");
}
到
encode: function( text ) {
// Do HTML encoding replacing < > & and ' and " by corresponding entities.
return text;
}