2009-03-25 8 views
63

Czy istnieje sposób na zmianę wartości węzła tekstowego DOM w przeglądarce internetowej?Zmiana wartości textNode

I specjalnie chcą zobaczyć, czy mogę zmiana istniejący węzeł, zamiast tworzenia nowy.

Aby wyjaśnić, muszę to zrobić z Javascriptem. Cały tekst w przeglądarce jest przechowywany w #textNodes, które są potomkami innych węzłów HTML, ale nie mogą mieć własnych węzłów potomnych.

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

+0

Przykład kodu HTML i co chciałbyś zmienić? Czy chcesz to zrobić za pomocą javascript? – shahkalpesh

Odpowiedz

94

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

node.nodeValue="new value"; 

Uwaga:

innerText (i ewentualnie textContent) zwróci/ustawi zarówno bieżący węzeł, jak i tekst wszystkich węzłów potomnych, a więc może nie być pożądanym/oczekiwanym zachowaniem.

+1

Tak, nodeValue jest idealny do tego. 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 textify), podczas gdy textContent miał być użyty w obu węzłach #Element AND #text. –

+4

Istnieje również "dane" jako krótki synonim "nodeValue" w tekście (jak również CDATASection i Comment). – bobince

+0

nodeValue to ta, której potrzebowałem. Z jakiegoś powodu myślałem, że to tylko do odczytu, ale wydaje się działać na FF3 i IE7. Dzięki! – levik

-4

wierzę innerHTML służy do tego ... Potem znowu, że nie jest zatwierdzony W3C ... ale to działa ...

node.innerHTML="new value"; 
+1

+1 za działające rozwiązanie. nodeValue nie pozwala mi zastąpić zawartości elementu – petermeissner

+3

Powinieneś * nigdy * używać 'innerHTML', ponieważ traktuje kod jako tekst zarówno podczas czytania * jak i * pisania. – John

+2

@petermeissner: To nie odpowiada na pytanie. Musisz ustawić 'nodeValue' na węźle tekstowym, a nie na jego elemencie macierzystym. –