2012-09-05 9 views
31

Powiel możliwe:
How to retrieve the text of a DOM Text node?Podczas pracy z węzłami tekstowymi należy używać pól "data", "nodeValue", "textContent" lub "wholeText"?

W moich doświadczeniach do obsługi DOM obserwatorów mutacji Zauważyłem, że gdy target jest węzłem tekstowym znajdują się cztery pola zawierające wszystkie nowe teksty węzeł.

  • data
  • nodeValue
  • textContent
  • wholeText

Czy istnieje "najlepsze praktyki", za który z tych pól należy użyć?

Czy niektóre są przeznaczone tylko do kompatybilności z innymi przeglądarkami lub starszymi standardami DOM? Czy ma to wpływ na to, czy czytam czy modyfikuję tekst? Jeśli jest najlepszy, jaki jest cel innych?

+0

Masz rację, powinienem też przeszukać, zanim odpowiem.) – raina77ow

+0

@ raina77ow: Poszukałem, ale istnieje więcej niż jeden sposób wyszukiwania SO i wciąż szukałem po opublikowaniu mojego pytania (-: – hippietrail

Odpowiedz

28

Spośród tych wszystkich wybrałbym data: jest zdefiniowany dla węzłów wykonawczych CharacterData interfejs (Text i Comment nich) tylko. Próba uzyskania dostępu do tej właściwości dla innych daje undefined.

nodeValue jest zasadniczo taki sam, jak data dla węzłów tekstowych, ale jest faktycznie zdefiniowany również dla węzłów atrybutów i komentarzy. Zwykle chcę, aby moje programy zawodziły wcześniej.)

textContent jest dla mnie czymś zupełnie innym, ponieważ reprezentuje treść tekstową węzła i jej potomków. To, wraz z wholeText, być może powinno być użyte bardziej do zbierania tekstów z bardziej złożonych struktur niż pojedynczy węzeł tekstowy.

Powiedział, że wszystkie, textContent i wholeText zostały zdefiniowane w DOM poziomie 3 (= bardziej nowoczesne).

+0

Tak naprawdę użyłem "danych", zanim zapytałem. Myślę, że częściowo dlatego, że było to pierwsze alfabetycznie a częściowo dlatego, że był najbardziej zwięzły. Dobrze mieć jednak bardziej deterministyczne powody! (-: – hippietrail

+0

Wygląda na to, że z tych czterech tylko textContent można zapisać ... (a raczej to jedyne, które wydaje się aktualizować wyświetlona treść), dlaczego jest to? – Michael

+2

Korekta: "dane" nie jest zdefiniowane "tylko dla węzłów tekstowych", ale dla [interfejsu danych CharacterData] (http://www.w3.org/TR/DOM-Level-3- Core/core.html # ID-FF21A306), który jest dziedziczony nie tylko przez [węzły tekstowe] (http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1312295772) , ale także [węzły komentarzy] (http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1728279322). –

Powiązane problemy