El Document Object Model (DOM) Core Level 1 define un conjunto de objetos e interfaces necesarias para el acceso y manipulación de los objetos del documento el cual es representado como una jerarquía de objetos Nodo (Node objects) de distintos tipos. Algunos de estos Nodos pueden contener otros nodos de uno o más tipos formando una jerarquía completa para el documento. Los tipos de nodos y la definición de que hijos pueden contener cada uno de ellos se describe a continuación:
Nodo | Tipos de nodos que puede contener |
---|---|
Document | Element (máximo uno), ProcessingInstruction, Comment, DocumentType |
DocumentFragment | Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference |
DocumentType | Ninguno |
EntityReference | Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference |
Element | Element, Text, Comment, ProcessingInstruction, CDATASection, EntityReference |
Attr | Text, EntityReference |
ProcessingInstruction | Ninguno |
Comment | Ninguno |
Text | Ninguno |
CDATASection | Ninguno |
Entity | Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference |
Notation | Ninguno |
La mayoría de las API's definidas en la especificación son interfaces en lugar de clases, esto significa que en una implementación real solo es encesario exponer los métodos con los nombres definidos y la operación especificada. Lo anterior es totalmente transparente para el programador, así que vamos a empezar a describir generalmente cada una de las interfaces, anotando sus atributos y métodos.
Interfaz Document
La interfaz document representa el documento HTML o XML completo. El document es la raíz del documento dese la cual se puede acceder a todos los demás datos del mismo.
Atributos | doctype, implementation, documentElement |
Métodos | createElement(tagName), createDocumentFragment(), createTextNode(data), createComment(data), createCDATASection(data), createProcessingInstruction(target, data), createAttribute(name), createEntityReference(name), getElementsByTagName(tagname) |
Interfaz DocumentFragment
El DocumentFragment representa un objeto mínimo de un documento. Es generalmente utilizado para la manipulación de partes del árbol del documento, el cual no debe estar necesariamente bien formado. Un DocumentFragment puede ser insertado en el documento o en otros nodos para seguir siendo manipulado en el árbol DOM. Esta interfaz actúa de intermediaria cuando se crean por ejemplo dos nodos (de la interfaz Node) y se juntan en un nodo padre (DocumentFragment) para luego ser insertado en el documento.
Interfaz Node
La interfaz Node representa el tipo de datos principal del modelo de objetos del documento (DOM). Aunque todos los nodos implementan los métodos para agregar otros nodos dentro de sí, hay que resaltar que no todos los nodos pueden tener hijos, por ejemplo el Text o Comment. Si se intenta agregar un nodo hijo en uno nodo que no pueda tenerlo se lanzará una excepción de la interfaz DOMException.
Constantes | Nombre | Tipo de nodo |
ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECTION_NODE ENTITY_REFERENCE_NODE ENTITY_NODE PROCESSING_INSTRUCTION_NODE COMMENT_NODE DOCUMENT_NODE DOCUMENT_TYPE_NODE DOCUMENT_FRAGMENT_NODE NOTATION_NODE |
Element Attr Text CDATASection EntityReference Entity ProcessingInstruction Comment Document DocumentType DocumentFragment Notation |
|
Atributos | nodeName, nodeValue, nodeType, parentNode, childNodes, firstChild, lastChild, previousSibling, nextSibling, attributes, owenerDocument | |
Métodos | insertBefore(newChild, refChild), replaceChild(newChild, oldChild), removeChild(oldChild), appendChild(newChild), hasChildNodes(), cloneNode(deep) |
Dependiendo del tipo de nodo, los valores para los atributos nodeName, nodeValue y attributes están dados por la siguiente tabla:
Tipo de nodo | nodeName | nodeValue | attributes |
---|---|---|---|
Element | tagName | null | NameNodeMap |
Attr | nombre del atributo | valor del atributo | null |
Text | #text | contenido del nodo | null |
CDATASection | #cdata-section | contenido del CDATA Section | null |
EntityReference | nombre de la entidad referenciada | null | null |
Entity | nombre de la entidad | null | null |
ProcessingInstruction | target | contenido sin destino | null |
Comment | #comment | contenido del comentario | null |
Document | #document | null | null |
DocumentType | nombre del tipo de documento | null | null |
DocumentFragment | #document-fragment | null | null |
Notation | nombre de la notación | null | null |
Interfaz NodeList
La interfaz NodeList proporciona una colección ordenada de nodos.
Atributos | length |
Métodos | item(index) |
Interfaz NamedNodeMap
Esta interfaz es utilizada para representar colecciones de nodos que han sido obtenidos mediante su nombre.
Atributos | length |
Métodos | getNamedItem(name), setNamedItem(arg), removeNamedItem(name), item(index) |
Interfaz CharacterData
Esta interfaz es una extensión de la interfaz Node que agrega un conjunto de atributos y métodos necesarios para acceder a los datos de caracteres del documento.
Atributos | data, length |
Métodos | substringData(offset, count), appendData(arg), insertData(offset, arg), deleteData(offset, count), replaceData(offset, count, arg) |
Interfaz Attr
Esta interfaz representa un atributo para un objeto Element. Generalmente los valores posibles son definidos en la definición del tipo de documento.
Atributos | name, specified, value |
Interfaz Element
La interfaz Element representa la mayoría de cada uno de los objetos nodo que encontramos en el documento. Element hereda de la interfaz Node, por lo que podremos utilizar sus métodos también.
Atributos | tagName |
Métodos |
getAttribute(name), setAttribute(name, value), removeAttribute(name), getAttributeNode(name), setAttributeNode(newAttr), removeAttributeNode(oldAttr), getElementsByTagName(name), normalize()
|
Interfaz Text
La interfaz Text representa como su nombre lo indica contenido textual (también llamado character data en XML) de un Element o Attr.
Métodos | splitText(offset) |
Interfaz Comment
Esta interfaz representa contenido comentado en el código XML o HTML, denotado entre las etiquetas <!-- y -->.
Aquellos que ya han utilizado el lenguaje de programación JavaScript y ya están familiarizados con el paradigma de programación orientado a objetos verán las anteriores interfaces muy familiares y de seguro habrán utilizado más del 40% de sus métodos y atributos. Para aquellos que aún se sienten desorientados no debe haber preocupación, la programación orientada a objetos es bastante compleja y se aprende en la mayoría de los casos con la práctica, es por esto que en una próxima entrega utilizaremos el lenguaje JavaScript para manipular el DOM de nuestros documentos y ver cómo es de fácil utilizar las anteriores interfaces para desarrollar aplicaciones básicas.
Aunque hemos visto la mayoría de interfaces, aún quedan las interfaces extendidas que en algunos casos nos pueden servir de mucho. A modo de investigación queda por la cuenta del lector leer las referencias para adentrarse más en este maravilloso tema. Hasta la próxima!.
Referencias
- Document Object Model (Core) Level 1. (1998, October 1). In World Wide Web Consortium (W3C). Retrieved 14:26, June 6, 2014, from http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html