Modifier la valeur textNode

91

Existe-t-il un moyen de modifier la valeur d'un textNode DOM dans le navigateur Web?

Je veux spécifiquement voir si je peux changer le nœud existant, plutôt que d'en créer un nouveau.

Pour clarifier, je dois le faire avec Javascript. Tout le texte du navigateur est stocké dans #textNodes qui sont des enfants d'autres nœuds HTML, mais ne peuvent pas avoir leurs propres nœuds enfants.

Comme indiqué ci-dessous, le contenu peut être modifié en définissant la propriété nodeValue de ces objets.

Levik
la source
Exemple de HTML et que souhaitez-vous changer? Voulez-vous le faire en utilisant javascript?
shahkalpesh
Au cours de mes recherches sur la même question, j'ai découvert que Mozilla Developer Network lève un avis de sécurité sur l' innerHTMLutilisation et favorise l' textContentutilisation . L'utilisation textContentfonctionne bien pour moi.
Joël

Réponses:

130

Si vous avez un nœud spécifique (de type #text) et souhaitez modifier sa valeur, vous pouvez utiliser la propriété nodeValue :

node.nodeValue="new value";

Remarque:

innerText (et peut-être textContent) retournera / définira à la fois le noeud actuel et le texte de tous les noeuds descendants, et peut donc ne pas être le comportement que vous voulez / attendez.

Cendre
la source
1
Oui, nodeValue est parfait pour cela. innerText et textContent diffèrent à cet égard: IE (qui a créé innerText) ne le prend pas en charge sur les nœuds #text (car il n'y a pas de nœuds enfants à textifier), alors que textContent était destiné à être utilisé sur les nœuds #Element ET #text.
Crescent Fresh
4
Il y a aussi «data» comme synonyme court de «nodeValue» sur Text (ainsi que CDATASection et Comment).
bobince
nodeValue est celui dont j'avais besoin. Pour une raison quelconque, je pensais qu'il était en lecture seule, mais semble fonctionner sur FF3 et IE7. Merci!
levik
8
@petermeissner: Cela répond parfaitement à la question, donc votre vote défavorable est totalement injustifié.
Tim Down
1
Ne fonctionne pas toujours. "Lorsque nodeValue est défini comme étant nul, sa définition n'a aucun effet." .. J'ai opté dans ce cas pour "textContent" ... le réglage a également mis à jour la valeur pour "innerText"
foobored
-10

Je crois que innerHTML est utilisé pour cela ... Encore une fois, ce n'est pas approuvé par le W3C ... mais cela fonctionne ...

node.innerHTML="new value";
KdgDev
la source
1
+1 pour une solution de travail. nodeValue ne me laisse pas remplacer le contenu de l'élément
petermeissner
3
Vous ne devez jamais utiliser innerHTMLcar il traite le code comme du texte à la fois en lecture et en écriture.
John
7
@petermeissner: Cela ne répond pas à la question. Vous devez définir nodeValuele nœud de texte, pas son élément parent.
Tim Down