6. Utilización del modelo de objetos del documento (DOM)
El documento describe el Modelo de Objetos del Documento (DOM), un estándar del W3C que permite acceder y manipular documentos HTML y XML. Explica la estructura de nodos, los tipos de nodos y sus propiedades y métodos, así como cómo interactuar con el DOM mediante JavaScript. También se incluyen ejemplos de acceso, creación y eliminación de nodos, y la programación de eventos en el DOM.
Introducción al DOM, API W3C, acceso y actualización de contenido. Se discuten tipos de DOM: Core, XML, y HTML, con estructura de árbol en el DOM. Detalles sobre nodos importantes en el DOM, como Document, Element, y atributos. Métodos y propiedades claves del objeto Node para manipulación de estos nodos.
Métodos para acceder a nodos, atributos y su manipulación. Ejemplos de código para extraer y modificar contenido en un documento HTML.
Ejercicios prácticos en la creación y eliminación de nodos en HTML y formularios dinámicos, utilizando técnicas de DOM.
Implementación de eventos en DOM: carga de la página, verificación de estado del árbol, y manipulación al desencadenar eventos.
Técnicas para mejorar la compatibilidad de código en diferentes navegadores, uso de librerías de terceros y ejercicios para generar formularios.
6. Utilización del modelo de objetos del documento (DOM)
2.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.1. EL MODELO DE OBJETOS DEL DOCUMENTO (DOM)
DOM:
• Estándar W3C que define cómo acceder a documentos (HTML, XML…).
• Interfaz de programación de aplicaciones (API) del W3C.
• Mediante scripts se puede acceder y actualizar el contenido dinámicamente.
Tipos:
LA U R A F O LG A D O G A LA CH E
DOM CORE: modelo
para cualquier
documento
estructurado.
XML DOM: modelo
estándar para
documentos XML.
HTML DOM: modelo
estándar para
documentos HTML
3.
<!DOCTYPE html PUBLIC”
//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1
-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type”
content="text/html; charset=iso-8859-1" />
<title>Páginasencilla</title>
</head>
<body>
<p>Estapáginaes <strong>muy
sencilla</strong></p>
</body>
</html>
LA U R A F O LG A D O G A LA CH E
6. UTILIZACIÓN DEL MODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.1. EL MODELO DE OBJETOS DEL DOCUMENTO (DOM)
4.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.1. EL MODELO DE OBJETOS DEL DOCUMENTO (DOM)
Ordenación de la estructura del árbol:
• En el árbol de nodos el superior es la raíz.
• Cada nodo, salvo la raíz, tiene un padre.
• Un nodo puede tener cualquier número de hijos.
• Una hoja es un nodo sin hijos.
• Nodos con el mismo padre son hermanos.
LA U R A F O LG A D O G A LA CH E
5.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.2. OBJETOS DEL MODELO. PROPIEDADES Y MÉTODOS
Nodos más importantes
LA U R A F O LG A D O G A LA CH E
Elemento Descripción
Document Es el nodo raíz del documentoHTML, todos los documentos del árbol cuelgan deél
DocumentType
Representación del DTD dela página. Un DTD es una definicióndetipode documento. Definela
estructuray sintaxis deun documentoXML. El DOCTYPEes el encargadodeindicar el DocumentType.
Element
Representael contenidodeuna pareja de etiquetas de apertura y cierre(<etiqueta>...</etiqueta>). También
puede representar unaetiquetaabreviada que secierraa si misma(<br/>).
Estees el úniconodo que puede tener tantos nodos hijos comoatributos.
Attr Representael nombrede un atributoo valor.
Text Almacenalainformación quees contenidadentrodeun nodoElement.
CDataSection
Representauna secuenciadecódigode tipo<![CDATA[]]>. Estetextosolamenteseráanalizadopor un
programade análisis.
Comment Representaun comentarioXML.
6.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.2. OBJETOS DEL MODELO. PROPIEDADES Y MÉTODOS
Interfaz Node
• Javascript crea un objeto llamado Node para para manipular la interfaz de los
nodos.
• Define una serie de constantes que identifican los tipos de nodo (diapositiva
siguiente).
• También proporciona propiedades y métodos.
LA U R A F O LG A D O G A LA CH E
7.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.2. OBJETOS DEL MODELO. PROPIEDADES Y MÉTODOS
LA U R A F O LG A D O G A LA CH E
Node.ELEMENT_NODE = 1 Node.ATTRIBUTE_NODE = 2 Node.TEXT_NODE = 3 Node.CDATA_SECTION_NODE = 4 Node.ENTITY_REFERENCE_NODE = 5
Node.ENTITY_NODE = 6 Node.PRO CESSING_INSTRUCTION_NODE = 7 Node.COMMENT_NODE = 8 Node.DOCUMENT_NODE = 9
Node.DOCUMENT_TYPE_NODE = 10
Node.DOCUMENT_FRAGMENT_NODE =
11
Node.NOTATION_NODE = 12
Constantes que identifican los tipos de nodo
8.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.2. OBJETOS DEL MODELO. PROPIEDADES Y MÉTODOS
Propiedades y métodos
LA U R A F O LG A D O G A LA CH E
Propiedad/Método Valor devuelto Descripción
nodeName String Nombredel nodo (noestádefinidoparaalgunos tipos de nodo)
nodeValue String
Valor del nodo(noestádefinidopara algunos tipos denodo).
Ej. Para<p>Texto</p>, el nodeValue devolverá “Texto”.
nodeType Number Unade las 12 constantes definidas anteriormente.
ownerDocument Document Referenciaal documentoal que perteneceel nodo.
firstChild Node Primer nodode la listadechildNodes.
lastChild Node Últimonodode la listadechildNodes.
childNodes NodeList Listade todos los hijos del nodoactual.
9.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.2. OBJETOS DEL MODELO. PROPIEDADES Y MÉTODOS
Propiedades y métodos
LA U R A F O LG A D O G A LA CH E
Propiedad/Método Valor devuelto Descripción
previousSibling Node Referenciadel hermanoanterior o null si es el primer hermano.
nextSibling Node Referenciadel hermanosiguienteonull si es el últimohermano.
hasChildNodes() Boolean Devuelve true si el nodo actual tieneunoo más hijos.
attributes NamedNodeMap
Con nodos de tipo Element. Contieneobjetos detipoAttr que definen los
atributos del elemento.
appendChild(nodo) Node Añade un nuevo nodo al final dela listachildNodes.
removeChild(nodo) Node Eliminaun nodode lalistachildNodes.
replaceChild(nuevo,anterior) Node Reemplaza el nuevo nodo por el nodoanterior.
insertBefore(nuevo, anterior) Node Insertaun nuevo nodoantes de la posición del nodoanterior.
10.
Ejemplode códigoen HTML:
<html>
<head>
<title>TituloDOM</title>
</head>
<body>
<p>ParrafoDOM</p>
<p>ParrafoDOMsegundo</p>
<p>ParrafoDOM tres</p>
</body>
</html>
Nodo raíz:
var obj_html= document.documentElement;
Primer y útlimohijodel nodo:
var obj_head= obj_html.firstChild;
var obj_body= obj_html.lastChild;
Accesoa nodos desdeel índicedeun array:
var obj_head= obj_html.childNodes[0];
var obj_body= obj_html.childNodes[1];
Accesoal númerode hijos (longituddel array):
var numeroHijos= obj_html.childNodes.length;
LA U R A F O LG A D O G A LA CH E
6. UTILIZACIÓN DEL MODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.3. ACCESO AL DOCUMENTO DESDE CÓDIGO
11.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.3. ACCESO AL DOCUMENTO DESDE CÓDIGO
Acceso a los tipos de nodo (extrayendo el valor):
• obj_tipo_document= document.nodeType; //9, o DOCUMENT_NODE
• obj_tipo_elemento=document.documentElement.nodeType; //1, o ELEMENT_NODE
Acceso a los tipos de nodo (comparando con el valor):
• alert(document.nodeType == Node.DOCUMENT_NODE); // true
• alert(document.documentEle
Acceso al texto de un nodo de tipo texto:
• Extraer el texto de un nodo: var x = document.getElementById(“miNodo").textContent;
• Cambiar el texto de un nodo: document.getElementById(“miNodo").textContent = "Paragraph
changed!“;
LA U R A F O LG A D O G A LA CH E
12.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.3. ACCESO AL DOCUMENTO DESDE CÓDIGO
Acceso directo a los nodos:
LA U R A F O LG A D O G A LA CH E
•Recupera los elementos de la página HTML que le hayamos pasado porparámetro.
•var divs= document.getElementsByTagName("div");
getElemementsByTagName()
•Recupera los datos de la página HTML donde “name”coincide con el name que le hayamos pasado en
la función.
•var divPrimero= document.getElementsByName("primero");
getElementsByName()
•Recupera el elemento HTMLcuyo ID coincida con el nombre pasado enla función.Ejemplo:
•var elemento1= document.getElementById("elemento1");
getElementById()
13.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.3. ACCESO AL DOCUMENTO DESDE CÓDIGO
Acceso a los atributos de un nodo de tipo element:
LA U R A F O LG A D O G A LA CH E
•Devuelve el nodode tipo attr cuyapropiedad nodeNamecontengael valor nomAttr.
getNameItem(nomAttr)
•Eliminael nododetipo attr en el que la propiedad nodeNamecoincidacon el valor nomAttr.
removeNameItem(nomAttr)
•Añade el nodo attr a la listadeatributos del nodoelement. Loindexasegún lapropiedad nodeNamedel
atributo.
setNameItem(nodo)
•Devuelve el nodocorrespondientealaposición indicadapor el valor numéricopos.
item(pos)
14.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.3. ACCESO AL DOCUMENTO DESDE CÓDIGO
Acceso a los nodos de tipo atributo:
LA U R A F O LG A D O G A LA CH E
• Equivale a attributes.getNameItem(nomAtributo)
getAttribute(nomAtributo)
•Equivale a attributes.getNamedItem(nomAtributo).value=valor
setAttribute(nomAtributo, valorAtributo)
• Equivale a attributes.removeNameItem(nomAtributo).
removeAttribute(nomAtributo)
15.
EJERCICIO: u6e1_analisispagina:
• Disponesdel código de una página web en html: u6e1_analisispagina_texto.html.
• Introduce en el apartado de script el código necesario para extraer:
• El número de párrafos de la página.
• El texto del segundo párrafo.
• El número de enlaces de la página.
• La dirección del primer enlace.
• La dirección del penúltimo enlace.
• El número de enlaces que apuntan a /wiki/Municipio
• El número de enlaces del primer párrafo.
• Para agregar texto en la página deberás introducir una etiqueta div con el id=info y
añadir en ella toda la información detallada mediante:
• Var info=document.getElementById(“info”);
• Info.innerHTML = “Texto informativo”;
LA U R A F O LG A D O G A LA CH E
6. UTILIZACIÓN DEL MODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.3. ACCESO AL DOCUMENTO DESDE CÓDIGO
16.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.3. ACCESO AL DOCUMENTO DESDE CÓDIGO
Creación y eliminación de nodos
LA U R A F O LG A D O G A LA CH E
•Crea un nodo de tipo atributo conel nombre pasado a la función.
createAttribute(nomAtributo)
•Crea una secciónde tipo CDATA conun nodo hijo de tipo texto conel valorpasado.
createCDataSection(texto)
•Crea un nodo de tipo comentario conel contenido del texto pasado.
createComment(texto)
•Crea un nodo de tipo DocumentFragment.
createDocumentFragment():
17.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.3. ACCESO AL DOCUMENTO DESDE CÓDIGO
Creación y eliminación de nodos
LA U R A F O LG A D O G A LA CH E
•Crea un elemento del tipo etiqueta,del tipo del parámetro pasado como nomEtiqueta.
createElement(nomEtiqueta)
•Crea un nodo de tipo EntityReference.
createEntityReference(nomNodo)
•Crea un nodo de tipo ProcessingInstruction.
createProcessingInstrution(objetivo.dato)
•Crea un nodo de tipo texto conel valordel parámetro pasado.
createTextNode(texto)
18.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.3. ACCESO AL DOCUMENTO DESDE CÓDIGO
Ejemplo de creación de nodos en un documento:
var h = document.createElement(“h1") ; //crea el elemento h1
var t = document.createTextNode(“Hola, mundo"); //crea el nodo de texto
h.appendChild(t); //añade el texto al elemento h1
var att = document.createAttribute("class"); //crea el atributo
att.value = “prueba"; // añade el valor del atributo
h.setAttributeNode(att); //añade el atributo al nodo h1 creado
RESULTADO: <h1 class=“prueba”>Hola, mundo</h1>
LA U R A F O LG A D O G A LA CH E
19.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.3. ACCESO AL DOCUMENTO DESDE CÓDIGO
P A R A A Ñ A D I R U N
E L E M E N T O A L B O D Y :
document.body.appendChild(h);
RESULTADO:
<body>
<h1
class=“prueba”>Hola,
mundo</h1>
</body>
P A R A A Ñ A D I R U N E L E M E N T O
A O T R O E L E M E N T O Q U E Y A
E S T Á E N E L H T M L :
var miDiv = document.getElementById(“miDiv”);
miDiv.appendChild(h);
RESULTADO:
<body>
<div id=“miDiv”>
<h1 class=“prueba”>Hola,
mundo</h1>
</div>
</body>
LA U R A F O LG A D O G A LA CH E
20.
EJERCICIO: u6e2_listado:
• Creauna página web que tenga un listado de tipo <ul> con un <li> de
muestra.
• Introduce un botón en la página que, cuando lo pulses, te muestre un prompt
para que el usuario introduzca un texto.
• Una vez cerrado el prompt el valor se añadirá como un nuevo <li> a la lista
creada.
• Añade dos botones más con texto “Borrar primer li” y “Borrar último li” de
modo que cuando pulses el primer botón borre el primer elemento de la lista
y cuando pulses el último borre el último elemento de la lista.
LA U R A F O LG A D O G A LA CH E
6. UTILIZACIÓN DEL MODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.3. ACCESO AL DOCUMENTO DESDE CÓDIGO
21.
EJERCICIO: u6e3_formulario:
• Creade manera dinámica (es decir, al cargarse la página) el formulario que
definimos en el ejercicio u5e1_formulario.
• Ten en cuenta que el formulario deberá tener los atributos necesarios para
que, al crearse, tenga la misma funcionalidad que el que creaste en html.
• No olvides añadir las etiquetas <label> a cada uno de los elementos.
LA U R A F O LG A D O G A LA CH E
6. UTILIZACIÓN DEL MODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.3. ACCESO AL DOCUMENTO DESDE CÓDIGO
22.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.4. PROGRAMACIÓN DE EVENTOS
Carga de la página HTML:
§ Se utiliza el evento onload:
<html>
<head><title>TituloDOM</title></head>
<body onload="alert('Página cargada completamente');">
<p>Primer parrafo</p>
</body>
</html>
LA U R A F O LG A D O G A LA CH E
23.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.4. PROGRAMACIÓN DE EVENTOS
Comprobar que el arbol DOM está cargado:
§ Se puede utilizar elmétodo window.onload:
<html>
<head><title>TituloDOM</title>
<script>
function cargada() {
window.onload="true";
if(window.onload){ return true;}
return false;
}
function pulsar(){
if(cargada()){ alert("Página cargadacorrectamente");}
}
</script>
</head>
<body><p onclick="pulsar();">Primerpárrafo</p></body>
</html>
LA U R A F O LG A D O G A LA CH E
24.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.4. PROGRAMACIÓN DE EVENTOS
Actuar sobre el DOM al desencadenarse eventos:
§ Se puede utilizar elmétodo window.onload:
<html>
<head><title>TituloDOM</title>
<script>
function ratonEncima(){
document.getElementsByTagName("div")[0].childNodes[0].nodeValue = "EL RATON ESTA ENCIMA";
}
function ratonFuera(){
document.getElementsByTagName("div")[0].childNodes[0].nodeValue = "NO ESTA EL RATON ENCIMA";
}
</script>
</head>
<body>
<div onmouseover="ratonEncima(); "onmouseout="ratonFuera();">
VALOR POR DEFECTO
</div>
</body>
</html>
LA U R A F O LG A D O G A LA CH E
25.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.5. DIFERENCIAS EN LAS IMPLEMENTACIONES DEL MODELO
Adaptaciones de código para diferentes navegadores:
§ Para mejorar la compatibilidad podemos crear de forma explícita las constantes
predefinidas:
• alert(Node.DOCUMENT_NODE); // Devolvería 9
• alert(Node.ELEMENT_NODE); // Devolvería 1
• alert(Node.ATTRIBUTE_NODE); // Devolvería 2
LA U R A F O LG A D O G A LA CH E
26.
Adaptaciones de códigopara
diferentes navegadores:
if(typeofNode == "undefined") {
varNode = {
ELEMENT_NODE: 1,
ATTRIBUTE_NODE: 2,
TEXT_NODE: 3,
CDATA_SECTION_NODE: 4,
ENTITY_REFERENCE_NODE: 5,
ENTITY_NODE: 6,
PROCESSING_INSTRUCTION_NO
DE: 7,
COMMENT_NODE: 8,
DOCUMENT_NODE: 9,
DOCUMENT_TYPE_NODE: 10,
DOCUMENT_FRAGMENT_NODE:
11,
NOTATION_NODE: 12
};
}
LA U R A F O LG A D O G A LA CH E
6. UTILIZACIÓN DEL MODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.5. DIFERENCIAS EN LAS IMPLEMENTACIONES DEL MODELO
27.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.5. DIFERENCIAS EN LAS IMPLEMENTACIONES DEL MODELO
Uso de librerías de terceros
§ Cross-browser: permite visualizar una página o aplicación igual en todos los
navegadores. Para ello surgen utilidades que permiten unificar eventos y propiedades.
§ Renderizar a través de una web: hay páginas que permiten introducir una dirección y
elegir la versión del navegador para visualizar (ej. Netrenderer.com, para explorer).
§ Programas para renderizar: permiten instalar varias versiones del mismo navegador,
pero dan problemas de compatibilidad de versiones con los últimos navegadores.
§ Instalar los navegadores en máquinas virtuales: consiste en instalar las versiones de los
navegadores en máquinas virtuales acorde con los sistemas operativos para los que hay
instalables de la versión del navegador. Hay que asegurarse que el navegador toma una
decisión u otra en función de la respuesta.
LA U R A F O LG A D O G A LA CH E
28.
6. UTILIZACIÓN DELMODELO DE EVENTOS DEL DOCUMENTO (DOM)
6.5. DIFERENCIAS EN LAS IMPLEMENTACIONES DEL MODELO
EJERCICIO: u6e4_generadorformularios:
Crea unaaplicación quetepermitirágenerar tus propios formulariosdemaneradinámica. Paraellodibujaunatablade
unasolafilay varias columnas. En cadacolumnahabráun botón querealicelosiguiente:
Crear un input detipotexto. Le preguntaráal usuariomedianteun prompt quénombre(atributoname)tieneel input.
• Crear un input detipopassword. Le preguntaráal usuariomedianteun prompt quénombre(atributoname)tieneel
input.
• Crear un textarea. Le preguntaráal usuarioel nombrey generará automáticamenteun textareade40 columnas y 5
filas.
• Crear un label. Preguntaráal usuarioaquéinput vareferido(atributofor).
• Crear unaimagen. Preguntaráal usuarioquérutatienelaimagen (atributosrc).
• Crear un checkbox. Preguntaráal usuarioel nombrey el valor (atributos namey value).
• Crear un radio. Preguntaráal usuarioel nombrey el valor (atributos namey value).
• Crear un botón (submit). Preguntaráal usuarioel nombrey el valor (atributos namey value).
LA U R A F O LG A D O G A LA CH E