2012-09-05 9 views
31

Eventuali duplicati:
How to retrieve the text of a DOM Text node?Quando si lavora con i nodi di testo dovrei usare il campo "data", "nodeValue", "textContent" o "wholeText"?

Nei miei esperimenti per gestire DOM osservatori mutazione ho notato che quando il target è un nodo di testo ci sono quattro campi tutte contenenti il ​​nuovo testo il nodo.

  • data
  • nodeValue
  • textContent
  • wholeText

C'è una "best practice" per la quale di questi campi devo usare?

Alcuni sono solo per compatibilità con altri browser o standard DOM precedenti? Fa differenza se sto leggendo o modificando il testo? Se uno è meglio qual è lo scopo degli altri?

+0

Hai ragione, avrei dovuto cercare prima di rispondere pure.) – raina77ow

+0

@ raina77ow: Ho cercato, ma c'è più di un modo per cercare SO e ho continuato a cercare dopo aver postato la mia domanda (-: – hippietrail

risposta

28

Di tutti questi sceglierei data: è definito solo per i nodi che implementano l'interfaccia CharacterData (Text e Comment). Cercando di accedere a questa proprietà per gli altri dà undefined.

nodeValue è essenzialmente lo stesso di data per i nodi di testo, ma in realtà è definito anche per nodi di attributi e commenti. E di solito voglio che i miei programmi falliscano presto.

textContent è, per me, qualcosa di completamente diverso, in quanto rappresenta il contenuto del testo di un nodo e dei suoi discendenti. Questo, insieme a wholeText, forse dovrebbe essere usato di più per raccogliere testi da strutture più complesse di un singolo nodo di testo.

Detto tutto ciò, textContent e wholeText sono stati definiti in DOM Level 3 (= più moderno).

+0

Ho effettivamente usato 'data' anche prima di chiederlo qui.Penso in parte perché era prima in ordine alfabetico e in parte perché era il più conciso, buono però per avere ragioni più deterministiche! (-: – hippietrail

+0

In realtà sembra che di questi quattro, solo textContent è scrivibile ... (o meglio, è l'unico che sembra aggiornare quello attuale contenuto visualizzato) .perché è questa? Correzione – Michael

+2

: 'data' non è definito" solo per nodi di testo ", ma per [Interfaccia CharacterData] (http://www.w3.org/TR/DOM-Level-3- Core/core.html # ID-FF21A306), che non è ereditato solo da [nodi di testo] (http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1312295772) , ma anche [Nodi di commento] (http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1728279322). –

Problemi correlati