Cambiar el valor de textNode

91

¿Hay alguna forma de cambiar el valor de un textNode DOM en el navegador web?

Específicamente, quiero ver si puedo cambiar el nodo existente, en lugar de crear uno nuevo.

Para aclarar, necesito hacer esto con Javascript. Todo el texto del navegador se almacena en #textNodes, que son hijos de otros nodos HTML, pero no pueden tener nodos hijos propios.

Como se responde a continuación, el contenido se puede cambiar estableciendo la propiedad nodeValue de estos Objetos.

levik
fuente
Ejemplo de HTML y ¿qué le gustaría cambiar? ¿Quieres hacerlo usando javascript?
shahkalpesh
Durante mi investigación sobre la misma pregunta, descubrí que Mozilla Developer Network genera un aviso de seguridad sobre el innerHTMLuso y favorece el textContentuso . El uso textContentfunciona bien para mí.
Joël

Respuestas:

130

Si tiene un nodo específico (de tipo #text) y desea cambiar su valor, puede usar la propiedad nodeValue :

node.nodeValue="new value";

Nota:

innerText (y posiblemente textContent) devolverá / establecerá tanto el nodo actual como el texto de todos los nodos descendientes, por lo que puede que no sea el comportamiento que desea / espera.

Ceniza
fuente
1
Sí, nodeValue es perfecto para esto. innerText y textContent difieren en este sentido: IE (que creó innerText) no lo admite en los nodos #text (ya que no hay nodos secundarios para textificar), mientras que textContent estaba destinado a usarse en los nodos #Element Y #text.
Crescent Fresh
4
También hay 'datos' como sinónimo corto de 'nodeValue' en el texto (así como CDATASection y Comment).
Bobince
nodeValue es el que necesitaba. Por alguna razón, pensé que era de solo lectura, pero parece funcionar en FF3 e IE7. ¡Gracias!
levik
8
@petermeissner: Esto responde la pregunta perfectamente, por lo que su voto negativo es completamente injustificado.
Tim Down
1
No siempre funciona ... "Cuando nodeValue se define como nulo, configurarlo no tiene ningún efecto". .. Opté en ese caso por "textContent" ... configurándolo también actualizó el valor para "innerText"
foobored
-10

Creo que innerHTML se usa para esto ... Por otra parte, eso no está aprobado por W3C ... pero funciona ...

node.innerHTML="new value";
KdgDev
fuente
1
+1 para una solución de trabajo. nodeValue no me permite sustituir el contenido del elemento
petermeissner
3
Usted debe no utilizar innerHTML, ya que trata de código como texto tanto en la lectura y la escritura.
John
7
@petermeissner: Esto no responde a la pregunta. Debe establecer nodeValueen el nodo de texto, no en su elemento principal.
Tim Down