Zmień wartość textNode

92

Czy istnieje sposób na zmianę wartości DOM textNode w przeglądarce internetowej?

W szczególności chcę sprawdzić, czy mogę zmienić istniejący węzeł, zamiast tworzyć nowy.

Aby wyjaśnić, muszę to zrobić za pomocą JavaScript. Cały tekst w przeglądarce jest przechowywany w #textNodes, które są elementami podrzędnymi innych węzłów HTML, ale nie mogą mieć własnych węzłów podrzędnych.

Jak udzielono poniżej, zawartość można zmienić, ustawiając właściwość nodeValue tych obiektów.

levik
źródło
Przykład HTML i co chciałbyś zmienić? Czy chcesz to zrobić za pomocą javascript?
shahkalpesh,
Podczas moich badań nad tym samym pytaniem dowiedziałem się, że Mozilla Developer Network zgłasza ostrzeżenie o bezpieczeństwie innerHTMLużytkowania i faworyzuje textContentużycie . U textContentmnie działa dobrze.
Joël

Odpowiedzi:

133

Jeśli masz określony węzeł (typu #text) i chcesz zmienić jego wartość, możesz użyć właściwości nodeValue :

node.nodeValue="new value";

Uwaga:

innerText (i możliwie textContent) zwróci / ustawi tekst zarówno dla bieżącego węzła, jak i dla wszystkich węzłów podrzędnych, więc może nie być zachowaniem, którego chcesz / oczekujesz.

Popiół
źródło
1
Tak, nodeValue jest do tego idealny. innerText i textContent różnią się pod tym względem: IE (który stworzył innerText) nie obsługuje go w węzłach #text (ponieważ nie ma węzłów potomnych do tekstowania), podczas gdy textContent miał być używany zarówno w węzłach #Element, jak i #text.
Crescent Fresh,
4
Istnieje również „data” jako krótki synonim „nodeValue” w tekście (a także CDATASection i Comment).
bobince
nodeValue jest tym, którego potrzebowałem. Z jakiegoś powodu myślałem, że jest tylko do odczytu, ale wydaje się, że działa na FF3 i IE7. Dzięki!
levik
8
@petermeissner: To doskonale odpowiada na pytanie, więc Twój głos przeciw jest całkowicie nieuzasadniony.
Tim Down
1
Nie zawsze działa .. „Gdy wartość nodeValue jest zdefiniowana jako null, ustawienie jej nie ma wpływu.” .. Zdecydowałem się w tym przypadku na „textContent”… ustawiając go zaktualizowałem również wartość „innerText”
przekazano
-10

Uważam, że do tego używany jest innerHTML ... Z drugiej strony, to nie jest zatwierdzone przez W3C ... ale działa ...

node.innerHTML="new value";
KdgDev
źródło
1
+1 za działające rozwiązanie. nodeValue nie pozwala mi zastąpić zawartości elementu
petermeissner
3
Nigdy nie powinieneś używać, innerHTMLponieważ traktuje kod jako tekst zarówno podczas czytania, jak i pisania.
Jan
7
@petermeissner: To nie odpowiada na pytanie. Musisz ustawić nodeValuewęzeł tekstowy, a nie jego element nadrzędny.
Tim Down