Javascript - 使用innerHTML 输出字符串*不带* HTML 编码的特殊字符?

问题描述 投票:0回答:4

当通过innerHTML()函数输出内容时,JavaScript似乎会自动将某些特殊字符转换为HTML实体。这是一个问题,因为我需要能够输出 < and > 而无需转换为 gt;和lt;

这种自动转换可以被阻止、逆转或逃脱吗?到目前为止,无论我做什么,< and > 总是自动编码为 HTML 实体。

示例代码:

function DisplayQueries() {
    var IDs = ['AllOpenedINC','AllOpenedCRQ','AllClosedINC','AllClosedCRQ','SameDayINC','SameDayCRQ','NotSameDayINC','NotSameDayCRQ',
        'StillOpenINC','StillOpenCRQ','OpenOldINC','OpenOldCRQ','OtherQueuesINC','OtherQueuesCRQ']

    for (var i = 0; i < IDs.length; i++) {
        if (eval(IDs[i]))
            document.getElementById(IDs[i]).innerHTML = eval(IDs[i]);
    }
}

查询变量示例:

AllOpenedINC = "('Company*+' = \"test\" OR 'Summary*' = \"%test%\") AND ('Submit Date' >= \"" + theDate +
    " 12:00:00 AM\" AND 'Submit Date' <= \"" + theDate + " 11:59:59 PM\")" + nameINC;
javascript html xhtml
4个回答
4
投票

你应该关注你想要实现的结果,而不是实现它的方式。 innerHTML() 进行编码,innerText() 和 textContent() 也进行编码。因此,如果您希望字符串恢复为 < or >,则应该对字符串进行解码。

您可以使用 unescapeHTML() 函数来获取您想要的结果。

 function unescapeHTML() {
    return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
  }

我希望这有帮助。我从原型中复制了它。

您可以将其用作

element.innerHTML.replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&')

1
投票

我认为你的问题是基于一个错误的前提。只需做一个非常简单的测试:

document.getElementById("testdiv").innerHTML = '<h1><em>Hello</em></h1>';

如果这工作正常,那么问题不在 JS 方面,而是你在系统中使用一些其他组件来对你的字符进行 HTML 编码。


0
投票

我知道发生了什么事。没有简单的方法可以阻止innerHTML将特殊字符转换为HTML实体,但是由于将DIV的内容复制到剪贴板时问题就出现了(使用仅限IE的JS,它可以工作,因为这是在政府环境中,每个人都有使用 IE),我只是使用了 Replace() 函数将 HTML 实体重新转换回 < and >。


-7
投票

您可以使用 jquery

.append()

© www.soinside.com 2019 - 2024. All rights reserved.