Alterar o valor textNode

91

Existe alguma maneira de alterar o valor de um textNode DOM no navegador da web?

Eu quero especificamente ver se posso alterar o nó existente, em vez de criar um novo.

Para esclarecer, preciso fazer isso com Javascript. Todo o texto no navegador é armazenado em #textNodes que são filhos de outros nós HTML, mas não podem ter nós filhos próprios.

Conforme respondido abaixo, o conteúdo pode ser alterado configurando a propriedade nodeValue desses Objetos.

levik
fonte
Exemplo de HTML e o que você gostaria de alterar? Você quer fazer isso usando javascript?
shahkalpesh,
Durante minha pesquisa sobre a mesma questão, descobri que a Mozilla Developer Network levanta um aviso de segurança sobre o innerHTMLuso e favorece o textContentuso . Usar textContentfunciona bem para mim.
Joël

Respostas:

130

Se você tem um nó específico (do tipo #text) e deseja alterar seu valor, pode usar a propriedade nodeValue :

node.nodeValue="new value";

Nota:

innerText (e possivelmente textContent) retornará / definirá o texto do nó atual e de todos os nós descendentes e, portanto, pode não ser o comportamento que você deseja / espera.

Cinza
fonte
1
Sim, nodeValue é perfeito para isso. innerText e textContent diferem neste aspecto: IE (que criou innerText) não o suporta em nós #text (já que não há nós filhos para textificar), enquanto textContent foi feito para ser usado em ambos os nós #Element E #text.
Crescent Fresh,
4
Também há 'dados' como um sinônimo curto para 'nodeValue' no texto (bem como CDATASection e Comment).
bobince
nodeValue é o que eu precisava. Por algum motivo, pensei que fosse somente leitura, mas parece funcionar no FF3 e no IE7. Obrigado!
Levik
8
@petermeissner: Isso responde à pergunta perfeitamente, então seu downvote é completamente injustificado.
Tim Down
1
Não funciona sempre ... "Quando nodeValue é definido como nulo, sua configuração não tem efeito." .. Nesse caso optei por "textContent" ... configurando-o também atualizou o valor de "innerText"
foobored em
-10

Acredito que o innerHTML seja usado para isso ... Então, novamente, isso não é aprovado pelo W3C ... mas funciona ...

node.innerHTML="new value";
KdgDev
fonte
1
1 para uma solução de trabalho. nodeValue não me permite substituir o conteúdo do elemento
petermeissner
3
Você nunca deve usar innerHTML, pois trata o código como texto tanto na leitura quanto na escrita.
João,
7
@petermeissner: Isso não responde à pergunta. Você deve definir nodeValueno nó de texto, não em seu elemento pai.
Tim Down