将 html 标签作为 ejs 变量的值传递
Posted
技术标签:
【中文标题】将 html 标签作为 ejs 变量的值传递【英文标题】:Passing html tags as ejs variables' value 【发布时间】:2014-09-30 08:54:46 【问题描述】:我正在使用 Koa 框架和 EJS 模板来呈现视图。我需要将一些 html 元素值发送到视图。但是 ejs 库正在将它们转换为 html 实体。我正在关注他们在https://www.npmjs.org/package/koa-ejs
中的说法在我的 js 文件中:
yield this.render('ejs file name',
a: 'hi',
b: '<a href="hi">hi</a>'
);
我的视图文件:
<%=a %>
<%=b %>
运行代码后我得到了什么:
hi
<a href="hi">hi</a>
但我需要 <a href="hi">hi</a>
作为值而不是 &lt;a href="hi"&gt;hi&lt;/a&gt;
有人有什么建议吗?
【问题讨论】:
你想在 EJS 中使用partial
函数。
你能再描述一下吗?因为我已经使用了部分,但这不是问题。这是关于值被即时转换为 html 实体,我将它们传递给 ejs。如何预防?
很高兴与我们分享解决方案:
【参考方案1】:
要使用文本编辑器(我使用 tinyMCE)处理 EJS 和 Node JS,只需将标签调用到 <%- <YOUR-VARAIABLE-NAME> %>
中,这会去除所有标签并完美呈现您的文本。
【讨论】:
【参考方案2】:通过手动检查模块代码找到了解决方案。默认情况下,ejs 模块将转义这些值。为了防止这种情况发生,我们需要将自己的转义函数发送到将覆盖现有模块的模块。
yield this.render('ejs file name',
a: 'hi',
b: '<a href="hi">hi</a>',
escape: function(html)
return String(html);
// don't replace the htmls
//.replace(/&/g, '&')
//.replace(/</g, '<')
//.replace(/>/g, '>')
//.replace(/'/g, ''')
//.replace(/"/g, '"');
);
【讨论】:
你可以类似地使用这样的东西:***.com/a/8125053/648350(参见链接答案的 cmets 部分) 这不是解决方案。感谢您的宝贵时间。 你不是想在 ejs 变量中取消转义 html 吗?这就是<%- %>
所做的:请参阅 EJS 文档中的未转义缓冲 github.com/visionmedia/ejs
这也不行。请不要浪费你的时间,因为我已经想通了。谢谢。
您能否在答案中包含您的 EJS 文件内容,您是否在做类似<%= escape(b) %>
的事情?以上是关于将 html 标签作为 ejs 变量的值传递的主要内容,如果未能解决你的问题,请参考以下文章
使用 JavaScript 和 EJS 获取 HTML 标记的内部文本并作为值传递给输入字段