Sie fügen HTML-Escapes ("Entities") in den Text ein, der benötigt wird. Nach der Dokumentation für createTextNode
:
data
ist eine Zeichenfolge, die die Daten enthält
im Textknoten gesetzt werden
Das ist es. Es sind die Daten, die in den Textknoten eingegeben werden sollen. Die DOM spec ist genauso klar:
Erstellt einen Text-Knoten mit der angegebenen Zeichenfolge.
Sie möchten Unicode in diese Zeichenfolge einschließen. Um Unicode in eine JavaScript-Zeichenfolge aufzunehmen, verwenden Sie Unicode escapes im Format \uXXXX
.
var textnode = document.createTextNode("x \u2208 \u211D");
Oder Sie könnten einfach schließen die tatsächlichen Unicode-Zeichen und vermeiden alle Mühe:
var textnode = document.createTextNode("x ∈ ℝ");
In diesem Fall nur sicherstellen, dass die JS-Datei als UTF-8 serviert wird, sind Sie Speichern der Datei als UTF-8 usw.
Der Grund dafür, dass die Einstellung .innerHTML
mit HTML-Entities funktioniert, ist, dass der Inhalt als HTML gesetzt wird, dh er interpretiert ihn als HTML, einschließlich Markup, spezielle Entities, etc Es kann leichter sein, dies zu verstehen, wenn man bedenkt die Differenz zwischen dem folgenden:
document.createTextNode("<div>foo</div>");
document.createElement("div").textContent = "<div>foo</div";
document.createElement("div").innerHTML = "<div>foo</div>";
Die ersten erstellt eine Textknoten mit dem Literalen"<div>foo</div>"
. Die zweite setzt den Inhalt des neuen Elements wörtlich auf "<div>foo</div>"
. Die dritte erzeugt andererseits ein tatsächliches div
Element innerhalb des neuen Elements, das den Text "foo"
enthält.
Textknoten = enthält diesen * Text *. Inneres HTML = enthält dieses * HTML *. Ein Fall wird explizit als HTML ausgewertet, der andere nicht. – deceze