Tema 4 - DOM de HTML y JavaScript
Tema 4 - DOM de HTML y JavaScript
Ejemplo de DOM
Considere el siguiente documento HTML:
<html>
<head>
<title>My title</title>
</head>
<body>
<a href="">My link</a>
<h1>My header</h1>
</body>
</html>
El nodo raz de un documento HTML anterior es <html>. Todos los dems nodos
en el documento estn contenidos dentro <html>. El nodo <html> tiene dos
nodos hijos: <head> y <body>. El nodo <head> tiene un nodo <title>.El nodo
<body> tiene los nodos <a> y <h1>.
ITSON
118
ITSON
Tema 4
119
La siguiente figura muestra una parte de un rbol de nodos y las relaciones entre
sus nodos:
ITSON
120
La Propiedad innerHTML
La propiedad innerHTML nos permite obtener o modificar el contenido de un
elemento.
El siguiente ejemplo obtiene el texto del elemento <p> con id="intro":
<html>
<body>
<p id="intro">Hola mundo!</p>
<script type="text/javascript">
txt=document.getElementById("intro").innerHTML;
document.write("<p>El texto en el parrafo intro: "
+ txt + "</p>");
</script>
</body>
</html>
ITSON
Tema 4
121
Mtodo getElementById()
Este mtodo regresa el elemento con el id especificado. Su sintaxis es:
node.getElementById("id");
ITSON
122
Mtodo getElementsByTagName()
Este mtodo regresa todos los elementos con el nombre de etiqueta especificado.
Su sintaxis es:
node.getElementsByTagName("tagname");
El siguiente ejemplo regresa una lista de nodos de todos los elementos <p> en el
documento:
document.getElementsByTagName("p");
El siguiente ejemplo regresa una lista de nodos de todos los elementos <p> que
son descendientes del elemento con id="principal":
document.getElementById("principal").getElementsByTagName("p");
Los nodos de la lista de nodos pueden accesarse por su ndice. Para acceder al
segundo prrafo podemos escribir:
y=x[1];
ITSON
Tema 4
123
InformacindeunNodoDOMdeHTML
En DOM de HTML, cada nodo es un objeto. Los objetos tienen mtodos y
propiedades que pueden manipularse mediante JavaScript. Tres propiedades de
ITSON
124
La Propiedad nodeName
La propiedad nodeName especifica el nombre de un nodo.
La Propiedad nodeValue
La propiedad nodeValue especifica el valor de un nodo.
El nodeValue para los nodos de los elementos est indefinido.
El nodeValue de un nodo de texto es el texto mismo.
El nodeValue de un atributo es el valor del atributo.
El siguiente ejemplo recupera el valor del nodo de texto del elemento <p
id="intro">:
<html>
<body>
<p id="intro">Hola mundo!</p>
<script type="text/javascript">
x=document.getElementById("intro");
document.write(x.firstChild.nodeValue);
</script>
</body>
</html>
La Propiedad nodeType
La propiedad nodeType especifica el tipo de un nodo. Esta propiedad es de solo
lectura.
ITSON
Tema 4
125
Tipo de Nodo
1
2
3
8
9
ITSON
126
UsodelObjetoStyle
El objeto Style de cada elemento HTML representa su estilo individual. El siguiente
ejemplo usa una funcin para cambiar el estilo del elemento <body> cuando se
hace clic en un botn:
<html>
<head>
<script type="text/javascript">
function cambiaColor() {
document.body.style.backgroundColor="lavender";
}
</script>
</head>
<body>
<input type="button" onclick=" cambiaColor()"
value="Cambia color de fondo" />
ITSON
Tema 4
127
</body>
</html>
El siguiente ejemplo usa una funcin para cambiar el estilo de un elemento <p>
cuando se hace clic en un botn:
<html>
<head>
<script type="text/javascript">
function CambiaEstilo() {
document.getElementById("p1").style.color="blue";
document.getElementById("p1").style.fontFamily="Arial";
}
</script>
</head>
<body>
<p id="p1">Hola mundo!</p>
<input type="button" onclick=" CambiaEstilo()"
value="Cambia Estilo" />
</body>
</html>
EventosdeDOMdeHTML
Los eventos son acciones que pueden ser detectadas desde JavaScript. Cada
elemento de una pgina Web tiene una serie de eventos que pueden disparar
funciones de JavaScript. Por ejemplo, se puede usar el evento onclick de un botn
para indicar que la funcin se ejecutar cuando el usuario haga clic sobre el botn.
Se definen los eventos en los elementos de HTML.
Ejemplos de eventos:
Nota: Normalmente los eventos se usan en combinacin con las funciones y las
funciones no ejecutarn antes de que el evento suceda.
El siguiente ejemplo despliega la fecha cuando se hace clic sobre un botn.
ITSON
128
<html>
<head>
<script type="text/javascript">
function despliegaFecha() {
document.getElementById("demo").innerHTML=Date();
}
</script>
</head>
<body>
<h1>Despliega Fecha</h1>
<p id="demo"></p>
<button type="button"
onclick="despliegaFecha()">
Despliega Fecha
</button>
</body>
</html>
ITSON
Tema 4
129
Evento onSubmit
El evento onSubmit se usa para validar todos los elementos de un formulario
antes de enviarlo.
En el siguiente ejemplo, la funcin checkForm() ser invocada cuando el usuario
haga clic en el botn Submit. Si los valores de los campos de entrada no son
aceptados, el envo es cancelado. La funcin checkForm() regresa un valor
booleano. Si regresa true la forma ser enviada, de otra manera el envo sera
cancelado.
<form method="post" action="xxx.htm" onsubmit="return checkForm()"
130
Descripcin
Especifica el tipo MIME
del cdigo
Establece el URL del
archivo externo con el
cdigo.
Valores
"text/javascript"
URL
Descripcin
Para insertar cdigo en
JavaScript
Si el atributo src est
presente el elemento
<script> debe estar
vaco.
Note que el cdigo JavaScript se coloca al final de la pgina para asegurarse que
no sea ejecutado antes de que el elemento <p> sea creado.
Funciones de JavaScript y Eventos
No siempre se quiere que el cdigo JavaScript sea ejecutado cuando la pgina
carga. Algunas veces deseamos que el cdigo ejecute cuando ocurre un evento.
En estos casos podemos poner el cdigo Javascript dentro de una funcin.
ITSON
Tema 4
131
ITSON
132
ITSON
Tema 4
133
Cuadro de Alerta
Un Cuadro de Alerta se usa cuando se quiere asegurar que la informacin
proviene del usuario. Cuando un Cuadro de Alerta aparece, el usuario tiene que
hacer clic en el botn "OK" para continuar.
La sintaxis de un Cuadro de Alerta es:
ITSON
134
alert("texto");
<body>
<input type="button" onclick="muestra_alerta()"
value="Muestra un Cuadro de Alerta" />
</body>
</html>
Cuadro de Confirmacin
Un Cuadro de Confirmacin se usa si queremos que el usuario verifique o acepte
algo. Cuando un Cuadro de Confirmacin aparece, el usuario tiene que hacer clic
en el botn "OK" o en el botn "Cancel" para continuar. Si el usuario hace clic en
el botn "OK", el cuadro regresa true. Si el usuario hace clic en el botn
"Cancel", el cuadro regresa el valor de false.
La sintaxis de un Cuadro de Confirmacin es:
confirm("texto");
ITSON
Tema 4
135
<body>
<input type="button" onclick=" muestra_confirmacion()"
value="Muestra un Cuadro de Confirmacion" />
</body>
</html>
ITSON
136
Ejemplo
El siguiente cdigo contiene una serie de funciones para validar que un campo no
este vaco, para valida una edad y para validar una fecha. Las funciones estn en
un archivo externo JavaScript. Las principales caractersticas de este cdigo son:
En la funcin validacionComun() se detecta si el navegador es una
versin que no soporta los mtodos de DOM de HTML empleados. En
estos casos no se realiza la validacin del lado del cliente y se delega la
validacin al servidor.
La deteccin se realiza verificando si el navegador tiene definidos algunos
mtodos como document.getElementById().
El formateo de los mensajes de aviso y error se realiza estableciendo la
clase CSS del elemento en el que se desplegar el mensaje.
valida.js
//
// Funciones de validacion de
//
var nbsp = 160;
var node_text = 3;
var cadenaVacia = /^\s*$/ ;
var campoEnfocarGlobal;
campoEnfocar
formularios de Javascript.
// caracter de espacio
// Tipo de nodo de texto de DOM
// Variable global para almacenar el
// enfocaAtrasado()
//
ITSON
Tema 4
137
ITSON
138
else
// Hacer que la cadena a desplegar sea el mensaje
mensajeDesplegar = mensaje;
// Despliega el mensaje
var elem = document.getElementById(idMensaje);
elem.firstChild.nodeValue = mensajeDesplegar;
// Establece la clase CSS para establecer las propiedades del mensaje
elem.className = claseMensaje;
}
// validacionComun()
//
// Codigo comun para todas las funciones de validacion:
// Si la version del navegador es vieja, pasa la validacion
// para que la validacion la haga el servidor
//
// Parametros:
//
- campoValidar: Elemento a validar
//
- idMensaje:
id del elemento en que se desplegara el mensaje
//
- requerido:
Campo requerido
//
// Regresa:
//
- true:
Pasa la validacion
//
- false:
Falla la validation
//
- prosigue: Continua con la siguiente validacion
var prosigue = 2;
function validacionComun(campoValidar, idMensaje, requerido) {
// Si el navegador es viejo
if (!document.getElementById)
// Deja la validacion al servidor
return true;
var elem = document.getElementById(idMensaje);
// Si el navegador es viejo, deja la validacion al servidor
if (!elem.firstChild) return true;
// El elemento en que se desplegara el mensaje no es el correcto
if (elem.firstChild.nodeType != node_text) return true;
// Si el campo a validar esta vacio
if(cadenaVacia.test(campoValidar.value)) {
// Si el campo esta vacio y es obligatorio
if(requerido) {
despliegaMensaje(idMensaje, "error",
"Error: Se requiere un valor");
enfoca(campoValidar);
return false;
ITSON
Tema 4
139
}
// Si el campo esta vacio y no es obligatorio
else {
// Borra un posible mensaje de error previo
despliegaMensaje(idMensaje, "warn", "");
return true;
}
}
return prosigue;
}
// validaPresente()
//
// Valida si se ha teclaeado algo en el campo de texto
//
// Parametros:
//
- campoValidar: Elemento a validar
//
- idMensaje:
id del elemento en que se desplegara el mensaje
//
// Regresa:
//
true si se teclaeado algo, falso en caso contrario
//
function validaPresente(campoValidar, idMensaje) {
var stat = validacionComun (campoValidar, idMensaje, true);
if(stat != prosigue) return stat;
// Borra un posible mensaje de error previo
despliegaMensaje (idMensaje, "warn", "");
return true;
}
// validaEdad()
//
// Valida la edad de una persona. Una edad tiene de 1 a 3 dgitos
// y edad en [0, edadMax]
//
// Parametros:
//
- edadMax:
Edad maxima
//
- campoValidar: Elemento a validar
//
- idMensaje:
id del elemento en que se desplegara el mensaje
//
- requerido:
Campo requerido
//
// Regresa:
//
true si ok
function validaEdad(edadMax, campoValidar, idMensaje, requerido) {
var stat = validacionComun (campoValidar, idMensaje, requerido);
if (stat != prosigue) return stat;
var edad = trim(campoValidar.value);
ITSON
140
ITSON
Tema 4
141
El siguiente cdigo muestra una pgina HTML en la que se utilizan las funciones
JavaScript anteriores para validar cada campo conforme se van capturando
valores as como al enviar el formulario completo. De existir un error en alguno de
los campos, se despliega un mensaje de error a la derecha del campo con el error.
Las principales caractersticas de este cdigo son:
Utiliza un botn de enviar estndar y su atributo onSubmit para invocar la
funcin que valida todo el formulario.
Las validaciones de cada campo individual se hacen mediante el atributo
onChange de cada campo para invocar a la funcin que valida cada
campo.
contactame.html
<html>
<head>
<title>Contáctame</title>
<link rel="stylesheet" type="text/css" href="estilos.css" />
<script type="text/javascript" src="valida.js">
</script>
<script type="text/javascript">
function validaEnviar() {
var elem;
var errores=0;
// Ejecuta las validaciones en orden inverso para que el elemento
// con el enfoque sea el primero con error
if(!validaEmail(document.forms.cuestionario.email,
'msjEmail', true)) errores += 1;
if(!validaEdad(150, document.forms.cuestionario.edad, 'msjEdad',
true)) errores += 1;
if(!validaPresente(document.forms.cuestionario.nombre,
'msjNombre')) errores += 1;
return (errores==0);
};
</script>
</head>
<body>
<h1 align="center">Contáctame</h1>
<form name="cuestionario" onSubmit="return validaEnviar()"
action="blanco.html">
<table align="center">
<caption>Mis Datos Personales</caption>
<tr>
<td align="right">Nombre *</td>
ITSON
142
Para resaltar los mensajes de aviso o de error, el cdigo JavaScript inserta estilos
para colorear el texto de los mensajes usando las siguientes reglas de estilo:
estilos.css
...
*.error {
color: red;
}
*.warn {
color: blue;
}
...
ITSON