30
Javascript Clásico. Javascript Clásico Javier Infante <[email protected]> Donosti :: EHU / UPV ::16/10/2009

Javascript Clásico

Embed Size (px)

DESCRIPTION

Resumen sobre Javascript old-school... DOM, métodos y Cross-Browsing

Citation preview

Page 1: Javascript Clásico

Javascript Clásico.

Javascript Clásico

Javier Infante <[email protected]>

Donosti :: EHU / UPV ::16/10/2009

Page 2: Javascript Clásico

Javascript Clásico.

● Incluir Javascript en nuestros documentos– INCLUSIÓN en (X)HTML:

● Inline en el documento:<script type="text/javascript">//<![CDATA[// código....//]]></script>

● Separando contenido de estructura:<script type="text/javascript"src="scripts.js"></script>

Page 3: Javascript Clásico

Javascript Clásico.

● Tipos de datos:– var intValue = 1;– var floatValue = 3.0;– var stringValue = "This is a string\n";– var sqString = 'This is also a string';– var array = [1,2,3];– var obj = {1,2,3};– var function = new function() {};

● Javascript es un lenguaje con tipado débil.● Las variables son declaradas con la palabra

reservada “var”, y són válidas en su ámbito de declaración.

Page 4: Javascript Clásico

Javascript Clásico.

● DOM– Interfaz independiente de la plataforma que

accede y puede modificar dinámicamente la estructura y el estilo de documentos.

– Existe un “estandar”: W3C DOM implementado “parcialmente” por casi todos los navegadores comerciales.

– Los documentos HTML poseen una estructura hereditaría representada como una estructura de árbol.

– Conjunto de propiedades y métodos para recorrer árboles XML (HTML), y examinar omodificar sus nodos.

Page 5: Javascript Clásico

Javascript Clásico.

<html> <head> <title>Sample Document</title> </head> <body> <h1>An HTML Document</h2> <p>This is a <i>simple</i> document. </body></html>

Page 6: Javascript Clásico

Javascript Clásico.

Page 7: Javascript Clásico

Javascript Clásico.

● Document– Nodo del que cuelgan (y heredan

propiedades y métodos) todos los elementos de un documento HTML.

● document.getElementById(iden)– Devuelve 1 único elemento identificado por el

atributo único “id”;● document.getElementsByTagName(“tag”)

– Devuelve un array con todos los nodos cuyo tag coincida con “tag”.

Page 8: Javascript Clásico

Javascript Clásico.

● Propiedad nodeType

– Elemento (1)● <p>Hola</p>

– Texto (3)● <p>Hola</p>

– Atributo (2)● <p class=”estilo”>Hola</p>

Page 9: Javascript Clásico

Javascript Clásico.

● Propiedad attributes– Devuelve array con los atributos de un nodo.– HTML:

<p id=”par1” class=”est_par”>ejemplo</p>

– JS:alert(document.getElementById("par1").attributes.length);// Muestra “2”

● Propiedad childNodes– Devuelve array con los nodos hijos.– HTML:

<p id=”p1”><strong>Hola</strong><em>¿que tal?</em>

– JS:alert(document.getElementById(“p1”).childNodes.length);// Muestra “2”

Page 10: Javascript Clásico

Javascript Clásico.

● Propiedad data– Devuelve el contenido dentro de un nodo.– HTML:

<p id=”p1”>hola que tal?</p>

– JS:alert(document.getElementById(“p1”).firstChild.data);//Muestra “hola que tal?”

● Propiedad firstChild– Devuelve el primer nodo hijo.– HTML:

<p id=”p1”><strong>hola</strong> que tal?</p>

– JS:document.getElementById(“p1”).firstChild.firstChild.data=”adios”;

Page 11: Javascript Clásico

Javascript Clásico.

● Propiedad data– Devuelve el contenido dentro de un nodo.– HTML:

<p id=”p1”>hola que tal?</p>

– JS:alert(document.getElementById(“p1”).firstChild.data);//Muestra “hola que tal?”

● Propiedad firstChild– Devuelve el primer nodo hijo.– HTML:

<p id=”p1”><strong>hola</strong> que tal?</p>

– JS:document.getElementById(“p1”).firstChild.firstChild.data=”adios”;

Page 12: Javascript Clásico

Javascript Clásico.

● Propiedad lastChild / nextSibling– Devuelve el último / anterior nodo hijo.

● Propieddad nodeName– Devuelve el nombre(tag) de un nodo.

● Propiedad nodeType– Devuelve el tipo de nodo (1|2|3)

● Propiedad nodeValue– Devuelve el contenido del nodo (si es de texto)– O NULL en caso de atributo.

● Propiedad parentNode– Devuelve el Nodo Padre

● Propiedad previousSibling– Devuelve el nodo hermano anterior.

● Propiedad innerHTML– Devuelve el contenido HTML debajo del nodo.

Page 13: Javascript Clásico

Javascript Clásico.

● Método createElement– Crea un nodo de tipo elemento

var oEM = document.createElement(“em”);

● Método createTextNode– Crea un nodo de tipo Texto

var oTxt = document.createTextNode(“hola”);

● Método appendChild()– Inserta un elemento como último hijo de otro

oEM.appendChild(oTxt);

● Método appendData– Inserta texto dentro de un nodo de texto

oEM.lastChild.appendData(“ ¿Qué tal?”);

● Método cloneNode– Clona un elemento

var oEM2 = oEM.cloneNode(true);

Page 14: Javascript Clásico

Javascript Clásico.

● Método insertBefore– Inserta un nodo, antes de un nodo hijo espefico.

var o = document.createElement(“em”);

o.appendChild(document.createTextNode(“adios”));

document.getElementById(“p1”).insertBefore(o,documnet.getElementById(“s1”));

● Método removeChild– Elimina un nodo hijo determinado

● Método hasChildNodes– Devuelve true/false si un nodo tiene o no, nodos

descendientes.

Page 15: Javascript Clásico

Javascript Clásico.

● Método getAttribute– Devuelve el atributo de un nodo.

alert(document.getElementById(“p1”).getAttribute(“id”));// Muestra p1

● Método setAttribute– Cambia el valor de atributo

document.getElementById(“p1”).setAttribute(“class”,”r2”);

● Método removeAttribute– Elimina un atributo de un nodo

Page 16: Javascript Clásico

Javascript Clásico.

● Manejadores de Eventos– EVENTO: método que se activa tras la

interactuación del usuario o del navegador.– Son la esencia principal del Javascript; sin

eventos, no hay interactuación.– Existen diferentes implementaciones del

sistema de eventos entre todas los navegadores del mercado (para variar).

● TIPOS DE EVENTOS– TECLADO

      keydown / keypress /keydown

Page 17: Javascript Clásico

Javascript Clásico.

– RATÓN● click● dblclick● ouseover● mousemove

– INTERFAZ● load / unload● resize / scroll● focus / blur

– FORMULARIO● submit / reset● change / select

Page 18: Javascript Clásico

Javascript Clásico.

● Registrando Eventos– Método tradicional inline

● Se trata de añadir un atributo a los nodos HTML.● El nombre de ese atributo será el evento que se

quiere disparar en ese nodo concreto, con el prefijo “on”.

<input type=”text” onclick=”javascript:go();” />

● DESACONSEJADO.– dificil mantenimiento.– rompe la regla de separar diseño /

funcionalidad.

Page 19: Javascript Clásico

Javascript Clásico.

– Método propuesto por el W3C● AddEventListener

elemento.addEventListener('click',funcion,true);

– Método propuesto por Microsoft● AttachEvent

elemento.attachEvent ('onclick',funcion);

Page 20: Javascript Clásico

Javascript Clásico.

● Propiedades de un Evento

– Al asignar una función a un evento determinado, tendremos acceso a un objeto de tipo evento con información muy valiosa del mismo (sobre que objeto se ha disparado el evento, que botón del ratón se ha pulsado, que letra has pulsado...)

– Dependiendo del tipo de evento, el objeto evento tendrá unas propiedades u otras.

– El acceso al objeto evento, así como sus propiedades son dependientes del navegador.

Page 21: Javascript Clásico

Javascript Clásico.

● Accediendo al evento– W3C:

● Depende del tercer parámetro en el método addEventListener.

● El método recibe como argumento el objeto evento.

function haz_click(e) {   alert(e.type);}document.getElementById(“boton1”).addEventListener  (“click”,haz_click,false);

Page 22: Javascript Clásico

Javascript Clásico.

● Accediendo al evento– Microsoft IE

● El evento esta disponible en una propiedad del objeto global window:

function haz_click() {   alert(window.event.type);}

document.getElementById(“boton1”).atachEvent(“onclick”,haz_click);

Page 23: Javascript Clásico

Javascript Clásico.

● Propiedades del evento– e.target (W3C) / e.srcElement (IE)

● La propiedad más importante que nos posee un evento es el objeto origen que lo ha invocado.

– W3C:function haz_click(e) {   alert(e.target.value); // alerta­> GO!}document.getElementById(“boton1”).addEventListener(“click”,haz_click,false);

<input type=”button” id=”boton1” value=”GO!” />

– Microsoft IEfunction haz_click() {  alert(window.event.srcElement.value); // alerta­> GO!}document.getElementById(“boton1”).atachEvent(“onclick”,haz_click);<input type=”button” id=”boton1” value=”GO!” />

Page 24: Javascript Clásico

Javascript Clásico.

● Mas propiedades del eventos– e.keyCode

● Devuelve el código ASCII de la tecla pulsada.

– e.pageX / e.pageY (No IE)● Devuelve las coordinadas x e y del puntero del

ratón relativas al documento.

– e.screenX / e.screenY● Devuelve las coordinadas x e y del puntero del

ratón relativas a la pantalla.

– e.button● Identifica qué botón del ratón se ha pulsado:

– IE: 1(izda) / 2(dcha) / 4(centro)– W3C: 0(izda) / 1(centro) / 2(dcha)

Page 25: Javascript Clásico

Javascript Clásico.

● XMLHttpRequest

– Objeto interno Javascript, encargado de hacer peticiones al servidor web y procesar la salida de éstas.

– Creado como control ActiveX por MS, esta implementado nativamente en otros navegadores (e implementa las mismas funcionalidades).

– AJAX!

Page 26: Javascript Clásico

Javascript Clásico.

● Instanciando XMLHttpRequest

– Nativamente:var oXML = new XMLHttpRequest();

– ActiveXvar oXML = new ActiveXObject(“Microsoft.XMLHTTP”);

– CrossBrowserif (window.XMLHttpRequest)   var oXML = new XMLHttpRequest();else if (window.ActiveXObject)  var oXML = new ActiveXObject(“Microsoft.XMLHTTP”);

Page 27: Javascript Clásico

Javascript Clásico.

● Métodos XMLHttpRequest– abort() - Detiene la petición en curso.– getAllResponseHeaders() - Devuelve todas las

cabeceras de la respuesta (etiquetas y valores) como una cadena.

– getResponseHeader(etiqueta)● Devuelve el valor de la etiqueta en las cabeceras

de la respuesta.

– open(método,URL,asíncrona,nombre,password)● Abre una conexión con esa URL mediante ese

GET o POST, aplicando los valores opcionales de la derecha.

– send(contenido) - Envía la petición.– setRequestHeader(etiqueta,valor)

● Establece el valor de las cabeceras de petición.

Page 28: Javascript Clásico

Javascript Clásico.

● Propiedades XMLHttpRequest– onreadystatechange – Función que se invoca al

cambiarse un estado en la conexión.– readyState - Estado de la conexión:

● 0 : No iniciado● 1: Cargando● 2: Cargado pero sin incorporar el contenido a los

objetos correspondientes.● 3: Incorporando contenido a los objetos

correspondientes.● 4: Carga completada

– responseText - Datos devueltos por el servidor en formato string.

– responseXML - Datos devueltos por el servidor en forma de documento XML que puede ser recorrido mediante las funciones del DOM.

– status / statusText - Código respuesta HTTP.

Page 29: Javascript Clásico

Javascript Clásico.

● Ejemplo GETif (window.XMLHttpRequest)  var oXML = new XMLHttpRequest();else if (window.ActiveXObject)  var oXML = new ActiveXObject("Microsoft.XMLHTTP");

oXML.open("GET","llamando.php?op1=3");oXML.onreadystatechange = cambiaestado;oXML.send(null);function cambiaestado() {  if (oXML.readyState==4)    alert(oXML.responseText);}

● Ejemplo POSTvar str = “op1=valor1&op2=valor2”;oXML.open("POST","llamando.php");oXML.onreadystatechange = cambiaestado;oXML.setRequestHeader("Content­Type","application/x­www­form­urlencoded");oXML.setRequestHeader("Content­Length",str.length);oXML.send(str);

Page 30: Javascript Clásico

Javascript Clásico.

Licencias / Créditos

LicenciaEste documento está protegido bajo la licencia Reconocimiento-

SinObraDerivada 2.1 España de Creative Common

(http://creativecommons.org/licenses/by-nc-sa/3.0/es/)

Copyright © 2009 Javier Infante <[email protected]>Se permite la copia, modificación, distribución, uso comercial y

realización de la obra, siempre y cuando se reconozca la autoría de la misma, a no sea ser que se obtenga permiso expreso del autor. El

autor no permite distribuir obras derivadas a esta. Esta nota no es la licencia completa de la obra, sinouna traducción de la nota orientativa

de la licenciaoriginal completa (jurídicamente válida).