如何在不转换转义字符的情况下使用Javascript添加HTML代码?

时间:2016-03-02 22:25:38

标签: javascript php html ajax innerhtml

我正在使用AJAX来处理表单提交。 AJAX请求返回带有文本字符串参数的javascript脚本。当我尝试将AJAX返回的脚本添加到现有页面时遇到问题。

以下是我尝试实现此目的的不同内容:

newAjaxBlock.appendChild(document.createTextNode(ajaxRequest.responseText));
newAjaxBlock.innerHTML = ajaxRequest.responseText;
newAjaxBlock.textContent = ajaxRequest.responseText;

问题是,如果我使用.innerHTML插入返回的脚本,它会将参数文本字符串中的转义字符转换为它们的HTML等效字符,并且由于字符串中的单引号和其他字符,脚本将抛出错误。 / p>

我希望.innerHTML能够获取文本并在PHP提供时完全编写它,而不会出现从转义字符到HTML等效字符的意外转换。

例如,我将在PHP中生成一个脚本并通过htmlspecialchars()运行它,并使文本字符串完全如下:

<script type='text/javascript' id='layerScript'>Lib.alertFunction(arg1, $arg2, '<p>You changed THING from &quot;value1&quot; to &quot;newValue&quot;.</p>');</script>

但是.innerHTML将其转换为:

<script type='text/javascript' id='layerScript'>Lib.alertFunction(arg1, $arg2, '<p>You changed THING from "value1" to "newValue".</p>');</script>

正如您所看到的,该脚本不会使用单引号和其他字符来处理参数列表。

相反,当我尝试使用createTextNode或.textContent选项时,它会创建一个忽略HTML标记的文本节点,并将其全部显示为文本而不是解释HTML。这对我来说并不意外,但让我没有任何选择,实际上只是在不转换转义字符的情况下编写HTML代码。

除非脚本参数包含单引号或lt和gt符号,否则所有代码都完全符合我的预期并且需要它,因此我知道我已将问题缩小到这个问题。我不想要jquery建议,我知道我可以编写额外的几天来编写一个功能来完成我需要的功能但是我想知道是否有什么东西可以做什么.innerHTML没有转换转义我浪费那个时间之前的角色。

这个确切的问题已经被问到并且用#34;使用.textContent&#34;正如我所提到的那样,使用AJAX插入格式化的HTML并不起作用。

0 个答案:

没有答案