【发布时间】:2018-06-03 05:33:36
【问题描述】:
简介
我目前正在创建一个模板构建器,用户可以在其中为应用构建模板。用户可以拖放多个块,例如文本块和“自定义代码”块。模板将在应用程序中解析。现在,模板可能如下所示:
<section>
<div class="row">
<div class="col-sm-12">
<section data-type="code">
<#code></#code>
</section>
</div>
</div>
<div class="row">
<div class="col-sm-12" data-type="container-content">
<section data-type="text">
<u>Lorem</u> ipsum
</section>
</div>
</div>
</section>
所以,这个模板包含两个元素(参见data-type 属性):一部分是自定义编写的代码。在这里,用户编写了自定义代码,包括 Apache Freemarker 代码。第二部分是自定义书面文本。
情况
上面的代码将以两种不同的方式使用。
- 确切地说,此代码将在使用 模板(这就是他们应该能够编写 Freemarker 代码的原因, 因为这将被解析)。
- 在我的网站上,用户应该能够 编辑此模板。因为代码存储在数据库中 上面写的,有问题:
问题
当我直接在 Web 界面中呈现模板时,text 部分将使用 <u></u> 标签正确呈现,但 code 部分也将呈现为 html,这可能会导致奇怪的行为(例如作为 freemarker 符号 </#list> 被自动转换为 <!--#list-->)。
但是,如果我仅将完整模板呈现为文本,则带有 <u></u> 标签的 text 部分也不会被呈现。
预期结果
我想用 JavaScript / jQuery 读取模板变量,然后将每个 data-type 解析为 html,将 text 解析为 html,并将 code 解析为文本。
如何循环遍历模板并执行此操作?
【问题讨论】:
-
这很有趣......这整个事情是在客户端编译和运行的吗?
-
这可能应该在 html 在浏览器端呈现之前完成
-
@Soolie 是的,是的!
-
不应该
$('[data-type="code"]').each(function () {$(this).text($(this).html())});做这个伎俩吗? -
否,因为
$('[data-type="code"]')仅适用于已解析为 html 的模板。当我这样做时,代码部分将被解析,这就是我想要阻止的。
标签: javascript jquery html templates escaping