无法在JQuery tmpl中的文本字符串上运行html

时间:2013-02-07 01:01:23

标签: jquery jquery-templates

在我的项目中的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;
    }

但仍然没有骰子。

2 个答案:

答案 0 :(得分:13)

答案是:

{{html description}}

我很早就尝试过,但因为我在大括号内留下了杂散空间,所以它没有正确解释。

: - (

答案 1 :(得分:0)

如果打开源,则可以修改执行编码的行。我没有看到关闭它的选项,所以这可能是最简单的解决方案。

变化:

encode: function( text ) {
            // Do HTML encoding replacing < > & and ' and " by corresponding entities.
            return ("" + text).split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;");
        }

encode: function( text ) {
            // Do HTML encoding replacing < > & and ' and " by corresponding entities.
            return text;        
}