Modifica il valore di textNode


91

C'è un modo per modificare il valore di un textNode DOM nel browser web?

In particolare, voglio vedere se posso cambiare il nodo esistente, piuttosto che crearne uno nuovo.

Per chiarire, devo farlo con Javascript. Tutto il testo nel browser è memorizzato in #textNodes che sono figli di altri nodi HTML, ma non possono avere nodi figli propri.

Come spiegato di seguito, il contenuto può essere modificato impostando la proprietà nodeValue di questi oggetti.


Esempio di HTML e cosa vorresti cambiare? Vuoi farlo usando javascript?
shahkalpesh

Durante la mia ricerca sulla stessa domanda, ho scoperto che Mozilla Developer Network solleva un avviso di sicurezza innerHTMLsull'utilizzo e ne favorisce l' textContentutilizzo . L'uso textContentfunziona bene per me.
Joël

Risposte:


130

Se hai un nodo specifico (di tipo #text) e vuoi cambiarne il valore puoi usare la proprietà nodeValue :

node.nodeValue="new value";

Nota:

innerText (e possibilmente textContent) restituirà / imposterà il testo sia del nodo corrente che di tutti i nodi discendenti, quindi potrebbe non essere il comportamento che desideri / ti aspetti.


1
Sì, nodeValue è perfetto per questo. innerText e textContent differiscono a questo proposito: IE (che ha creato innerText) non lo supporta sui nodi #text (poiché non ci sono nodi figlio da textify), mentre textContent doveva essere usato su entrambi i nodi #Element E #text.
Crescent Fresh

4
C'è anche "data" come breve sinonimo di "nodeValue" sul testo (oltre a CDATASection e Comment).
bobince

nodeValue è quello di cui avevo bisogno. Per qualche motivo ho pensato che fosse di sola lettura, ma sembra funzionare su FF3 e IE7. Grazie!
levik

8
@petermeissner: questo risponde perfettamente alla domanda, quindi il tuo voto negativo è completamente ingiustificato.
Tim Down

1
Non sempre funziona .. "Quando nodeValue è definito come null, l'impostazione non ha alcun effetto." .. Ho optato in quel caso per "textContent" ... impostandolo aggiornava anche il valore per "innerText"
foobored

-10

Credo che innerHTML sia usato per questo ... Poi di nuovo, non è approvato dal W3C ... ma funziona ...

node.innerHTML="new value";

1
+1 per una soluzione funzionante. nodeValue non mi consente di sostituire il contenuto dell'elemento
petermeissner

3
Non dovresti mai usare innerHTMLpoiché tratta il codice come testo sia in lettura che in scrittura.
Giovanni

7
@petermeissner: questo non risponde alla domanda. Devi impostare nodeValueil nodo di testo, non il suo elemento genitore.
Tim Down
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.