2012-09-05 8 views
31

Duplicar posible:
How to retrieve the text of a DOM Text node?Al trabajar con nodos de texto, ¿debo usar los campos "data", "nodeValue", "textContent" o "wholeText"?

En mis experimentos para manejar los observadores de mutación DOM me he dado cuenta de que cuando el target es un nodo de texto hay cuatro campos que contienen todo el nuevo texto de el nodo

  • data
  • nodeValue
  • textContent
  • wholeText

¿Hay una "mejor práctica" para cuál de estos campos que debo usar?

¿Son algunos solo por compatibilidad con otros navegadores o estándares DOM más antiguos? ¿Hace una diferencia si estoy leyendo o modificando el texto? Si uno es mejor, ¿cuál es el propósito de los demás?

+0

Tienes razón, debería haber buscado antes de responder también.) – raina77ow

+0

@ raina77ow: Hice la búsqueda, pero hay más de una forma de buscar SO y seguí buscando después de publicar mi pregunta (-: – hippietrail

Respuesta

28

De todos ellos me quedaría con data: se define para los nodos de ejecución CharacterData interfaz (Text y los Comment) solamente. Intentar acceder a esta propiedad para los demás da undefined.

nodeValue es esencialmente lo mismo que data para los nodos de texto, pero en realidad se define para los nodos de atributo y comentario también. Y generalmente quiero que mis programas fallen temprano.)

textContent es, para mí, algo completamente diferente, ya que representa el contenido de texto de un nodo y sus descendientes. Esto, junto con wholeText, tal vez debería usarse más para recopilar textos de estructuras más complejas que un solo nodo de texto.

Dicho todo esto, textContent y wholeText se definieron en DOM Nivel 3 (= más moderno).

+0

De hecho, también utilicé 'datos' antes de preguntar aquí. Creo que en parte porque primero fue alfabéticamente y en parte porque era el más conciso. Sin embargo, ¡es bueno tener más razones deterministas! (-: – hippietrail

+0

En realidad, parece que de estos cuatro, solo el contenido de texto es grabable ... (o más bien, es el único que parece actualizar ese real contenido mostrado). ¿Por qué es esto? – Michael

+2

Corrección: 'data' no está definido" solo para nodos de texto ", pero para la [interfaz CharacterData] (http://www.w3.org/TR/DOM-Level-3- Core/core.html # ID-FF21A306), que no solo es heredado por [Nodos de texto] (http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1312295772) , pero también [Nodos de comentarios] (http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1728279322). –

Cuestiones relacionadas