拥有以下lodash模板源
<script id="resume-template" type="text/html">
<tr>
<td>Curriculum</td>
<td>
<%= _.unescape(resume.curriculum) %>
</td>
</tr>
</script>
具有以下背景
const context = {
resume: {
email: '...',
firstName: '...',
lastName: '...',
curriculum: "&lt;p&gt;some important information goes here&lt;/p&gt;\r\n&lt;p&gt;unordered list&lt;/p&gt;\r\n&lt;ul&gt;\r\n&lt;li&gt;item1&lt;/li&gt;\r\n&lt;li&gt;item2&lt;/li&gt;\r\n&lt;li&gt;item3&lt;/li&gt;\r\n&lt;li&gt;item4&lt;/li&gt;\r\n&lt;/ul&gt;\r\n&lt;p&gt;ordered list&lt;/p&gt;\r\n&lt;ol&gt;\r\n&lt;li&gt;pet1&lt;/li&gt;\r\n&lt;li&gt;pet2&lt;/li&gt;\r\n&lt;li&gt;pet3&lt;/li&gt;\r\n&lt;li&gt;pet4&lt;/li&gt;\r\n&lt;/ol&gt;\r\n&lt;p&gt;Some &lt;span style=&quot;text-decoration: line-through;&quot;&gt;&lt;span style=&quot;text-decoration: underline;&quot;&gt;&lt;strong&gt;other&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;text-decoration: underline;&quot;&gt;information&lt;/span&gt; &lt;span style=&quot;text-decoration: line-through;&quot;&gt;goes&lt;/span&gt; &lt;strong&gt;here&lt;/strong&gt;&lt;/p&gt;"
}
}
以下实施
const app = document.querySelector('#app');
const resume = response; // ajax response
const source = document.querySelector('#resume-template').innerHTML;
const template = _.template(source);
app.innerHTML = template(resume);
我需要将resume.curriculum键的内容呈现为html,为了完成此操作,我首先取消了resume.curriculum内容<%= _.unscape(resume.curriculum) %>
,但是我没有获取html,而是获取了html标签,他们的内容为文本
作为帮助,如果在模板中我将以下内容<%= '<p><i>Some content</i></p>' %>
适当地呈现为html
感谢您解决此问题的任何帮助
答案 0 :(得分:1)
在服务器端代码的某处,您已经双重转义了curriculum
字段。看到这个块:
&lt;p&gt;some important information goes here&lt;/p&gt;
应该是:
<p>some important information goes here</p>
因此,修复服务器端代码,您就会看到您的内容开始工作。要验证这一点,只需更改:
<td>
<%= _.unescape(resume.curriculum) %>
</td>
为:
<td>
<%= _.unescape(_.unescape(resume.curriculum)) %>
</td>