Javascript-использование innerHTML для вывода строк * без * специальных символов в HTML-кодировке?

похоже, что JavaScript автоматически преобразует определенные специальные символы в HTML-объекты при выводе содержимого с помощью функции innerHTML (). Это проблема, так как мне нужно иметь возможность выводить без преобразования в 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 ответов


вы должны сосредоточиться на том, что вы хотите достичь в результате, а не способ сделать это. innerHTML () кодирует, innerText () и textContent () тоже кодируют. Поэтому вы должны декодировать свои строки, если хотите, чтобы они были назад.

вы можете использовать эту функцию unescapeHTML (), чтобы получить результаты, как вы хотите.

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

надеюсь, это поможет. Я скопировал его с прототипа.


Я думаю, что ваш вопрос основан на ложной предпосылке. Просто сделайте очень простой тест:

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

если это работает нормально, то проблема не на стороне JS, вместо этого вы используете некоторые другие компоненты в своей системе, которые HTML-кодируют ваши символы.


Я понял, что происходит. Нет простого способа предотвратить преобразование специальных символов innerHTML в HTML-объекты, но поскольку проблема возникла при копировании содержимого DIV в буфер обмена (используя IE-только JS, который работает, так как это находится в правительственной среде, где каждый должен использовать IE), я просто использовал функцию replace() для повторного преобразования HTML-объектов обратно в .


можно использовать в jQuery и .append()