Змінити значення textNode


91

Чи є спосіб змінити значення DOM textNode у веб-браузері?

Я спеціально хочу побачити, чи можу я змінити існуючий вузол, а не створювати новий.

Щоб пояснити, мені потрібно зробити це за допомогою Javascript. Весь текст у браузері зберігається у #textNodes, які є дочірніми для інших вузлів HTML, але не можуть мати власних дочірніх вузлів.

Як відповіли нижче, вміст можна змінити, встановивши властивість nodeValue цих Об'єктів.


Приклад HTML і що ви хотіли б змінити? Ви хочете зробити це за допомогою JavaScript?
shahkalpesh

Під час мого дослідження з того самого питання я виявив, що Mozilla Developer Network надсилає повідомлення про безпеку щодо innerHTMLвикористання та підтримує textContentвикористання . Використання textContentдля мене прекрасно працює.
Joël

Відповіді:


131

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

node.nodeValue="new value";

Примітка:

innerText (і можливо textContent) поверне / встановить як поточний вузол, так і текст усіх низхідних вузлів, і тому може бути не такою поведінкою, яку ви бажаєте / очікуєте.


1
Так, nodeValue ідеально для цього підходить. innerText і textContent відрізняються в цьому відношенні: IE (який створив innerText) не підтримує його на #text вузлах (оскільки немає дочірніх вузлів для текстифікації), тоді як textContent мав бути використаний як на #Element, так і на #text вузлах.
Crescent Fresh

4
Також у тексті є "data" як короткий синонім для "nodeValue" (а також CDATASection і Comment).
bobince

nodeValue - це той, який мені потрібен. Чомусь я думав, що це лише для читання, але, схоже, працює на FF3 та IE7. Дякую!
levik

8
@petermeissner: Це ідеально відповідає на запитання, тому ваш голос проти абсолютно необгрунтований.
Тім Даун,

1
Працює не завжди .. "Коли nodeValue визначено як нуль, установка не впливає." .. Я вибрав у цьому випадку "textContent" ... встановивши його, оновив також значення для "innerText"
переглянуто

-10

Я вважаю, що для цього використовується innerHTML ... Знову ж таки, це не затверджено W3C ... але це працює ...

node.innerHTML="new value";

1
+1 за робочий розчин. nodeValue не дозволяє мені замінити вміст елемента
petermeissner

3
Ніколи не слід використовувати, innerHTMLоскільки він розглядає код як текст як під час читання, так і під час письма.
Джон

7
@petermeissner: Це не відповідає на запитання. Вам потрібно встановити nodeValueтекстовий вузол, а не його батьківський елемент.
Тім Даун,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.