我有明确的应用程序,并且EJS作为视图引擎。 我试图以2种不同的方式将html设置为div:
const attachmentFileNames = '<%= eco.attachmentFileName %>';
if (attachmentFileNames) {
$("#attachmentFileNameList").html(attachmentFileNames.replace(',', '<br/>'));
}
和
const attachmentFileNames = "<%= eco.attachmentFileName ? eco.attachmentFileName.replace(',', '<br/>') : '' %>";
if (attachmentFileNames) {
$("#attachmentFileNameList").html(attachmentFileNames);
}
问题是,代码的第一个安全性正在按预期工作('
'被视为行终止符),但是第二个代码只是将所有数据设置为文本('
'显示为字符串)。
有人可以解释吗?
答案 0 :(得分:1)
这不是jQuery的html
函数,而是EJS,它会自动转义<%= ... %>
表达式产生的文本。
在第二个示例中,如果您在调试器中查看attachmentFileNames
的值,可能会看到<br/>
(或<br/>
)而不是<br/>
。当您将"<br/>"
(或"<br/>"
)用作HTML时,结果是字符<
,b
,r
,/
和{ {1}}:
>
const attachmentFileNames1 = 'one,two';
if (attachmentFileNames1) {
$("#attachmentFileNameList1").html(attachmentFileNames1.replace(',', '<br/>'));
}
const attachmentFileNames2 = 'one<br/>two';
if (attachmentFileNames2) {
$("#attachmentFileNameList2").html(attachmentFileNames2);
}