Изменить значение textNode

Есть ли способ изменить значение текстового узла DOM в веб-браузере?

Я специально хочу посмотреть, смогу ли я изменить существующий узел, а не создать новый.

Чтобы уточнить, мне нужно сделать это с помощью Javascript. Весь текст в браузере хранится в #textNodes, которые являются дочерними элементами других узлов HTML, но не могут иметь собственных дочерних узлов.

Как указано ниже, содержимое можно изменить, установив свойство nodeValue этих объектов.


person levik    schedule 25.03.2009    source источник
comment
Пример HTML и что бы вы хотели изменить? Вы хотите сделать это с помощью javascript?   -  person shahkalpeshp    schedule 25.03.2009
comment
Во время исследования того же вопроса я обнаружил, что Mozilla Сеть разработчиков сообщает о безопасности в отношении innerHTML использования и поддерживает textContent использование. Использование textContent отлично работает для меня.   -  person Joël    schedule 22.08.2019


Ответы (2)


Если у вас есть определенный узел (типа #text) и вы хотите изменить его значение, вы можете использовать nodeValue свойство:

node.nodeValue="new value";

Примечание:

innerText (и возможно textContent) вернет/установит текст как текущего узла, так и всех дочерних узлов, и поэтому может не соответствовать тому поведению, которое вы хотите/ожидаете.

person Ash    schedule 25.03.2009
comment
Да, nodeValue идеально подходит для этого. innerText и textContent различаются в этом отношении: IE (который создал innerText) не поддерживает его на узлах #text (поскольку нет дочерних узлов для текстового преобразования), тогда как textContent предназначался для использования как на узлах #Element, так и на узлах #text. - person Crescent Fresh; 25.03.2009
comment
Также есть «данные» как краткий синоним «nodeValue» в тексте (а также CDATASection и Comment). - person bobince; 25.03.2009
comment
nodeValue - это то, что мне нужно. По какой-то причине я думал, что это только для чтения, но, похоже, работает на FF3 и IE7. Спасибо! - person levik; 26.03.2009
comment
@petermeissner: Это прекрасно отвечает на вопрос, поэтому ваш отрицательный голос совершенно необоснован. - person Tim Down; 29.03.2015
comment
Работает не всегда. Когда nodeValue определено как null, его установка не имеет никакого эффекта. .. В этом случае я выбрал textContent... установка обновила также значение для innerText - person foobored; 22.11.2017
comment
Обратите внимание: если вы пытаетесь установить текст элемента (а не текстового узла), вам может потребоваться element.insertBefore(document.createTextNode('text'), null) вместо element.nodeValue='text', если у узла нет текстовых дочерних элементов. - person Christopher Schultz; 18.06.2020

Я считаю, что для этого используется innerHTML... Опять же, это не одобрено W3C... но это работает...

node.innerHTML="new value";
person KdgDev    schedule 25.03.2009
comment
+1 за рабочее решение. nodeValue не позволяет мне заменить содержимое элемента - person petermeissner; 12.08.2014
comment
Вы не должны никогда использовать innerHTML, так как он обрабатывает код как текст как при чтении , так и при записи. - person John; 19.10.2014
comment
@petermeissner: это не отвечает на вопрос. Вы должны установить nodeValue на текстовом узле, а не на его родительском элементе. - person Tim Down; 29.03.2015