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

时间:2011-04-06 17:48:09

标签: javascript html xhtml

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

是否可以阻止,撤消或转义此自动转换?到目前为止,无论我做什么,<和>始终自动编码为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;

4 个答案:

答案 0 :(得分:2)

你应该专注于你想要完成的事情,而不是那样做。 innerHTML()执行编码,innerText()和textContent()执行编码。所以你应该解码你的字符串,如果你想要它们&lt;或者&gt;回来。

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

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

我弄明白发生了什么。没有简单的方法可以阻止innerHTML将特殊字符转换为HTML实体,但是因为在将DIV的内容复制到剪贴板时出现了问题(使用IE-only JS,因为这是在政府环境中,每个人都有使用IE),我只是使用replace()函数将HTML实体重新转换回&lt;和&gt;。

答案 3 :(得分:-2)

您可以使用jquery.append()