Вы включаете HTML-экраны («сущности») в тексте. Согласно документации для createTextNode
:
data
представляет собой строку, содержащую данные, которые будут ставить в текстовом узле
Вот и все. Это данные помещаются в текстовый узел. DOM spec так же ясно:
Создает текстовый узел с заданной строкой.
Вы хотите включить Unicode в эту строку. Чтобы включить Unicode в строку JavaScript, используйте Unicode escapes, в формате \uXXXX
.
var textnode = document.createTextNode("x \u2208 \u211D");
Или вы просто могли бы включать в себя фактический характер Unicode и избежать всех проблем:
var textnode = document.createTextNode("x ∈ ℝ");
В этом случае, просто убедитесь, что файл JS подается в UTF-8, вы сохраняя файл как UTF-8 и т. д.
Причина, по которой настройка .innerHTML
работает с объектами HTML, заключается в том, что она устанавливает контент как HTML, что означает, что он интерпретирует его как HTML, во всех отношениях, включая разметку, специальные объекты и т. д. . Это может быть легче понять, если вы считаете разница между следующим:
document.createTextNode("<div>foo</div>");
document.createElement("div").textContent = "<div>foo</div";
document.createElement("div").innerHTML = "<div>foo</div>";
Первым создает текстовый узел с буквенными символами"<div>foo</div>"
. Второй устанавливает содержание нового элемента буквально до "<div>foo</div>"
. С другой стороны, третий создает фактический элемент div
внутри нового элемента, содержащего текст "foo"
.
Текстовый узел = содержит этот * текст *. Внутренний HTML = содержит этот * HTML *. Один случай явно оценивается как HTML, другой - нет. – deceze