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

92

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

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

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

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

левик
источник
Пример HTML и что бы вы хотели изменить? Вы хотите сделать это с помощью javascript?
shahkalpesh
В ходе исследования того же вопроса я обнаружил, что Mozilla Developer Network предупреждает об innerHTMLиспользовании и поощряет textContentиспользование . Использование textContentотлично работает для меня.
Joël

Ответы:

133

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

node.nodeValue="new value";

Заметка:

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

Ясень
источник
1
Да, nodeValue идеально подходит для этого. innerText и textContent различаются в этом отношении: IE (который создал innerText) не поддерживает его на узлах #text (поскольку нет дочерних узлов для текстового преобразования), тогда как textContent предназначался для использования как на узлах #Element, так и на #text.
Crescent Fresh
4
Также есть «данные» в качестве краткого синонима «nodeValue» в тексте (а также CDATASection и Comment).
bobince
nodeValue - это тот, который мне нужен. По какой-то причине я думал, что он доступен только для чтения, но, похоже, работает с FF3 и IE7. Благодарность!
levik
8
@petermeissner: Это отлично отвечает на вопрос, так что ваш отрицательный голос совершенно необоснован.
Тим Даун
1
Работает не всегда .. "Когда nodeValue определен как null, установка не имеет никакого эффекта." .. Я выбрал в этом случае "textContent" ... установив, что он обновил также значение для "innerText"
foobored
-10

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

node.innerHTML="new value";
KdgDev
источник
1
+1 за рабочее решение. nodeValue не позволяет мне заменять содержимое элемента
Петермайсснер
3
Вы никогда не должны использовать, innerHTMLпоскольку он обрабатывает код как текст как при чтении, так и при записи.
Джон
7
@petermeissner: Это не ответ на вопрос. Вы должны установить nodeValueтекстовый узел, а не его родительский элемент.
Тим Даун