尝试在模板中呈现html内容时遇到问题

时间:2018-06-11 20:34:11

标签: javascript lodash

拥有以下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: "&amp;lt;p&amp;gt;some important information goes here&amp;lt;/p&amp;gt;\r\n&amp;lt;p&amp;gt;unordered list&amp;lt;/p&amp;gt;\r\n&amp;lt;ul&amp;gt;\r\n&amp;lt;li&amp;gt;item1&amp;lt;/li&amp;gt;\r\n&amp;lt;li&amp;gt;item2&amp;lt;/li&amp;gt;\r\n&amp;lt;li&amp;gt;item3&amp;lt;/li&amp;gt;\r\n&amp;lt;li&amp;gt;item4&amp;lt;/li&amp;gt;\r\n&amp;lt;/ul&amp;gt;\r\n&amp;lt;p&amp;gt;ordered list&amp;lt;/p&amp;gt;\r\n&amp;lt;ol&amp;gt;\r\n&amp;lt;li&amp;gt;pet1&amp;lt;/li&amp;gt;\r\n&amp;lt;li&amp;gt;pet2&amp;lt;/li&amp;gt;\r\n&amp;lt;li&amp;gt;pet3&amp;lt;/li&amp;gt;\r\n&amp;lt;li&amp;gt;pet4&amp;lt;/li&amp;gt;\r\n&amp;lt;/ol&amp;gt;\r\n&amp;lt;p&amp;gt;Some &amp;lt;span style=&amp;quot;text-decoration: line-through;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;other&amp;lt;/strong&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;information&amp;lt;/span&amp;gt; &amp;lt;span style=&amp;quot;text-decoration: line-through;&amp;quot;&amp;gt;goes&amp;lt;/span&amp;gt; &amp;lt;strong&amp;gt;here&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;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

感谢您解决此问题的任何帮助

enter image description here

1 个答案:

答案 0 :(得分:1)

在服务器端代码的某处,您已经双重转义了curriculum字段。看到这个块:

&amp;lt;p&amp;gt;some important information goes here&amp;lt;/p&amp;gt;

应该是:

&lt;p&gt;some important information goes here&lt;/p&gt;

因此,修复服务器端代码,您就会看到您的内容开始工作。要验证这一点,只需更改:

<td>
  <%= _.unescape(resume.curriculum) %>
</td>

为:

<td>
  <%= _.unescape(_.unescape(resume.curriculum)) %>
</td>