Ändern Sie den textNode-Wert

91

Gibt es eine Möglichkeit, den Wert eines DOM-Textknotens im Webbrowser zu ändern?

Ich möchte speziell sehen, ob ich den vorhandenen Knoten ändern kann , anstatt einen neuen zu erstellen .

Zur Verdeutlichung muss ich dies mit Javascript tun. Der gesamte Text im Browser wird in #textNodes gespeichert, die untergeordnete Elemente anderer HTML-Knoten sind, jedoch keine eigenen untergeordneten Knoten haben können.

Wie unten beantwortet, kann der Inhalt geändert werden, indem die Eigenschaft nodeValue dieser Objekte festgelegt wird.

Levik
quelle
Beispiel für HTML & was möchten Sie ändern? Möchten Sie es mit Javascript machen?
Shahkalpesh
Während meiner Recherche zu derselben Frage stellte ich fest, dass Mozilla Developer Network einen Sicherheitshinweis zur innerHTMLVerwendung ausgibt und die textContentVerwendung bevorzugt . Verwenden textContentfunktioniert gut für mich.
Joël

Antworten:

130

Wenn Sie einen bestimmten Knoten (vom Typ #text) haben und dessen Wert ändern möchten, können Sie die Eigenschaft nodeValue verwenden :

node.nodeValue="new value";

Hinweis:

innerText (und möglicherweise textContent) gibt sowohl den aktuellen Knoten als auch den gesamten absteigenden Knotentext zurück / legt diesen fest und entspricht daher möglicherweise nicht dem gewünschten / erwarteten Verhalten.

Asche
quelle
1
Ja, nodeValue ist dafür perfekt. innerText und textContent unterscheiden sich in dieser Hinsicht: IE (der innerText erstellt hat) unterstützt es nicht auf # text-Knoten (da keine untergeordneten Knoten zum Textifizieren vorhanden sind), während textContent sowohl auf # Element- als auch auf # text-Knoten verwendet werden sollte.
Crescent Fresh
4
Es gibt auch 'data' als kurzes Synonym für 'nodeValue' in Text (sowie CDATASection und Comment).
Bobince
nodeValue ist derjenige, den ich brauchte. Aus irgendeinem Grund dachte ich, es sei schreibgeschützt, scheint aber auf FF3 und IE7 zu funktionieren. Vielen Dank!
Levik
8
@petermeissner: Dies beantwortet die Frage perfekt, so dass Ihre Ablehnung völlig ungerechtfertigt ist.
Tim Down
1
Funktioniert nicht immer. "Wenn nodeValue als null definiert ist, hat das Festlegen keine Auswirkung." .. Ich habe mich in diesem Fall für "textContent" entschieden ... die Einstellung hat auch den Wert für "innerText" aktualisiert
Uhr
-10

Ich glaube, dass innerHTML dafür verwendet wird ... Andererseits ist das nicht W3C-genehmigt ... aber es funktioniert ...

node.innerHTML="new value";
KdgDev
quelle
1
+1 für eine funktionierende Lösung. Mit nodeValue kann ich den Inhalt des Elements nicht ersetzen
petermeissner
3
Sie sollten niemals verwenden, innerHTMLda Code sowohl beim Lesen als auch beim Schreiben als Text behandelt wird .
John
7
@ Petermeissner: Dies beantwortet keine Frage. Sie müssen den Textknoten festlegen nodeValue, nicht das übergeordnete Element.
Tim Down