SlideShare una empresa de Scribd logo
1 de 53
Descargar para leer sin conexión
Javascript en proyectos reales




Nuevos estándares Web
Máster en Ingeniería Web     David Arango Maroto
Universidad de Oviedo                Simplelógica
Javascript en los 90s




http://www.dynamicdrive.com/dynamicindex9/noright.htm
Javascript en la actualidad
                (mayormente)
●   Compatibilidad
●   Portabilidad
●   Código no intrusivo
    –   No hay consenso sobre la definición
    –   Separación entre capas
    –   Evitar incompatibilidad
    –   Graceful degradation
Javascript en la actualidad
●   Demanda de expertos:
    –   607 ofertas buscando en www.tecnoempleo.com
    –   http://jobs.jsninja.com/
●   Requerimientos Javascript en proyectos reales
●   Mucho buzz por la llamada “Web 2.0”
¿Cómo quieres escribir Javascript?


            - Dificultad +
 Drop-in                     From scratch
¿Por qué usar librerías?
●   Simplifican el trabajo con Javascript
    –   Múltiples niveles de DOM
    –   Diferentes implementaciones en navegadores
●   Agilidad
Librerías
●   Prototype
●   Dojo
●   moo.fx      ¡NO FRAMEWORKS!
●   YUI
●   Jquery
●   ...
Librerías – 2007

                                                 jQuery 38%




                                                           YUI 17%
         Prototype 45%




http://ajaxian.com/archives/nitobi-survey-results-on-ajax-development
Librerías – 2008

                                               jQuery 37%




  Prototype 37%
                                                     YUI 26%




http://ajaxian.com/archives/2007-ajax-tools-usage-survey-results
Prototype vs jQuery
●   Prototype:
    –   Extiende los objetos de DOM y de Javascript.
    –   Añade un montón de objetos extra.
    –   Muy sólida.
●   jQuery
    –   Totalmente encapsulada en un sólo objeto.
    –   Permite encadenado de métodos.
    –   Realmente sencilla e intuitiva.
jQuery
●   “Haz más con menos código”
●   2006, John Resig
●   Todo lo que necesitas:
    –   Selección de elementos del DOM
    –   Manejo de eventos                http://ejohn.org/about/

    –   API ajax
    –   Animaciones (básicas)
jQuery (somos fans)
●   Estupenda documentación
●   Comunidad sólida
    –   http://docs.jquery.com/Discussion
    –   http://lists.scriptia.net/listinfo.cgi/jquery-es-scriptia.net
●   Variedad de plugins
●   Integración con RoR
    –   http://ennerchi.com/projects/jrails
●   Libre, cobertura de tests, amplio soporte de
    navegadores...
jQuery ¿por qué?
●   Estilo de programación
●   Manejo de eventos más sencillo
●   Peso       80

               70
                     73


               60
                                         54
               50

               40

               30

               20

               10

               0
                          Prototype           jQuery


     Comprimidas con YUI Compressor http://developer.yahoo.com/yui/compressor/
Lovely lovely jQuery
●   Cuando empezamos con jQuery no había soporte
    RoR
●   Los bindings javascript de RoR tenían problemas de
    accesibilidad
●   jQuery hizo el trabajo, bueno, y nosotros
●   Choan Gálvez fue el culpable:
    –   http://choangalvez.nom.es/
Al grano, la función jQuery
●   La función jQuery encapsula toda la funcionalidad
    de la librería.
●   Lo primero que debes saber es cómo agregar
    comportamiento en la carga del DOM ¡magia!:


      $(document).ready(function() { })
Inciso: incluyendo scripts
●   Hay sólo una forma de hacerlo bien, y no hace falta
    ser Neerlandés para utilizarla:


<script type=”text/javascript”>
    // Cada vez que pones LANGUAGE Dios mata un gatito
</script>



                                                 Buenas
                                                prácticas
Selección de nodos, CSS
●   CSS
    –   $('p.activo')
    –   $('ul#menu li.activo')
    –   $('ul#menu li:first')
    –   $('ul#menu li:odd')
    –   $('ul#menu li:eq(3)')
Selección de nodos, CSS3


           $('div[id^=quot;contentquot;]')
       Elementos div cuyo id empieza por “content”
                        Más en:
http://www.456bereastreet.com/archive/200601/css_3_selectors_e
Moviéndonos por el DOM
●   parents() y parent()
●   prev(), prev('a')
●   next()
●   siblings()
Inciso: literal de objeto
●   Utiliza el literal de objeto, es una forma de
    encapsular tu código:


mi_app = {
    init: function() {
        // Cosas
    }
}
                                                     Buenas
$(document).ready(mi_app.init);                     prácticas
Colecciones de nodos
●   Con una selección de nodos podemos...
     –    Recorrerla:
           ●   $('input').each(function() { alert(this.value) })
     –    Hacer modificaciones:
           ●   $('p').hide()
           ●   $('p').addClass('activo')
           ●   $('p:odd').show().addClass('odd').append('<strong>Yeah!
               </strong>)
●   ...
Trabajando con la colección
Modificación de attributos
●   attr() hace sencillo el trabajo con atributos:
    –   $('p').attr('title') // Retorna el valor del atributo para
        el primer elemento encontrado
    –   $('p.destacado').attr('title', 'Destacado') // Asigna el
        valor al atributo de todos los elementos de la colección
●   removeAttr()
●
    addClass(), removeClass, hasClass() hacen el
    resto
Manipulación de contenidos
●   Obtener y cambiar contenido
    –   html() text() val()   (getters y setters)
●   Inserciones
    –   after() before() // Insertar fuera
    –   append() prepend() // Insertar dentro
    –   wrap()
Modificación de estilos
●   css() nos hace el trabajo:
    –   $('p').css('color', 'red')
    –   $('p.destacado').css({ color: 'red', background-color:
        'blue'})

●   Ojito con la separación entre capas
Inciso: usa siempre var
●   Las variables en Javascript tienen ámbito global o
    local dependiendo de si se han creado con la
    palabra clave var:


numero = 42 // Yo soy global
var numero = 42 // Yo soy local



                                                  Buenas
                                                 prácticas
Ejemplo: cebrear tabla
●   Crear una tabla y aplicarle un color diferente a las
    filas pares e impares siguiendo los preceptos de la
    separación entre capas.
Efectos
●   hide() y show()
●   slideDown(), slideUp()
●   fadeIn() y fadeOut
●   Permiten añadir comportamiento al terminar la
    animación:
    –   $('p').slideDown(2000, function() { alert('Fin') })
Ejemplo: ocultar párrafos
●   Documento con una serie de párrafos.
●   Insertar enlaces antes de cada párrafo que permitan
    ocultar y desplegar.
Sobre el cierre del elemento
                  <script>
●   Según el apéndice C de la especificación XHTML 1.0:


    C.3 Element Minimization and Empty Element Content
    Given an empty instance of an element whose content
       model is not EMPTY (for example, an empty title or
    paragraph) do not use the minimized form (e.g. use <p>
                      </p> and not <p />).
         http://www.w3.org/TR/xhtml1/#guidelines
Manejo de eventos
●   $('p').bind('click', function() { alert('Click') })
●   blur, focus, load, resize, scroll, unload,
    beforeunload, click, dblclick, mousedown,
    mouseup, mousemove, mouseover, mouseout,
    mouseenter, mouseleave, change, select, submit,
    keydown, keypress, keyup, error
●   Muchos tienen shortcuts:
     –   $('a:first').click(mostrar_parrafos)
Manejo de eventos
●   Si el callback del evento retorna false se cancela el
    burbujeo y el comportamiento por defecto de dicho
    evento:
$('a:first').click(function() {
    // El navegador no sigue el enlace
    return false;
});
Inciso: burbujeo de eventos
●   ¿Qué pasa cuando dos elementos anidados tienen
    comportamiento para un mismo evento?

        Captura                     Burbujeo
                       1                         2




     http://www.quirksmode.org/js/events_order.html
preventDefault versus return(false)
●   return(false) evita la propagación del evento y
    cancela su comportamiento por defecto.
●   En ocasiones no querremos cancelar el burbujeo:
$('a').click(function(e) {
    e.preventDefault();
});
●   Si queremos evitar la propagación sin cancelar el
    comportamiento por defecto: stopPropagation()
Ojo
●   return(false) no frenará el comportamiento por defecto
    si ocurre un error javascript antes:
$('a').click(function() {
    funcion_inexistente();
    return(false);
    // El enlace seguirá su curso
    // Un preventDefault hubiera hecho el trabajo
});
                                                   Buenas
                                                  prácticas
Ejemplo: menú de acordeon
●   Empezamos con una lista de enlaces anidada.
●   Los enlaces de primer nivel deben ser agrupadores.
●   Al hacer click sobre un enlace de primer nivel se
    despliega la lista de enlaces que contiene.
Ejemplo: tabtastic
●   Típica lista de contenidos con pestañas.
AJAX


Asynchronous
 Javascript
    And
    XML
AJAX
Inciso, diálogos HTTP
●   Presentación sobre diálogos HTTP.
●   Analizar la Fisgona de Menéame.
AJAX




               ?
Asynchronous
 Javascript
    And
    XML
Ajax en minúsculas


●   Más que un acrónimo, es una forma de interacción.
●   Carga asincrónica de datos, con o sin interacción del
    usuario.
Ejemplos: autocompletado
Ejemplos: edit in place
Ejemplos: formularios asincrónicos
Ajax con jQuery: load()



       load(uri)
Ejemplo: hola mundo ajax
●   Escribir una página web con una lista de enlaces a
    páginas locales.
●   Cargar el enlace vía ajax en un div insertado a
    continuación.
●   Copiar el ejemplo a servidor HTTP local, analizar con
    firebug las cabeceras HTTP.
Ajax avanzado en jQuery : ajax()

          $.ajax({
            url: url,
            dataType: 'xml',
            success: function(msg) {
                // Éxito
            }
          });
Ejemplo: ajax con xml
●   ¡Lo de antes era AHAH!
    http://en.wikipedia.org/wiki/AHAH
●   Intentar el ejemplo anterior con XML como tipo de
    datos.
Tests de unidad: jShoulda



   http://jshoulda.scriptia.net/
Tests de aceptación: Selenium




         http://seleniumhq.org/
    http://www.vimeo.com/2343914

Más contenido relacionado

La actualidad más candente

Despegar Tech Talk - AngularJS
Despegar Tech Talk - AngularJSDespegar Tech Talk - AngularJS
Despegar Tech Talk - AngularJSFacundo Viale
 
AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)
AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)
AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)Nacho García Fernández
 
Guia java script
Guia java scriptGuia java script
Guia java scriptmariaunefa
 
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularDesarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularFreelancer
 
La magia de jquery
La magia de jqueryLa magia de jquery
La magia de jqueryAngelDX
 
Guia html2
Guia html2Guia html2
Guia html2ljds
 
Definición y función de lenguaje java script
Definición y  función de lenguaje java scriptDefinición y  función de lenguaje java script
Definición y función de lenguaje java scriptAndres Rodriguez
 
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4Rodolfo Finochietti
 
primefaces cortesia del portal de java
primefaces cortesia del portal de javaprimefaces cortesia del portal de java
primefaces cortesia del portal de javaSalvador Olivares
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Facescok12v
 
Introduccion a AngularJS
Introduccion a AngularJSIntroduccion a AngularJS
Introduccion a AngularJSOscar Gensollen
 
Curso de Desarrollo Web de Platzi
Curso de Desarrollo Web de PlatziCurso de Desarrollo Web de Platzi
Curso de Desarrollo Web de PlatziCarlos Azaustre
 
DotNet 2019: Optimizando Apps con Xamarin.Forms
DotNet 2019: Optimizando Apps con Xamarin.FormsDotNet 2019: Optimizando Apps con Xamarin.Forms
DotNet 2019: Optimizando Apps con Xamarin.FormsJavier Suárez Ruiz
 
09b jsf (1)
09b jsf (1)09b jsf (1)
09b jsf (1)UTN
 
Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)Sorey García
 

La actualidad más candente (20)

Despegar Tech Talk - AngularJS
Despegar Tech Talk - AngularJSDespegar Tech Talk - AngularJS
Despegar Tech Talk - AngularJS
 
AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)
AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)
AngularJS 1 - A Superheroic Javascript MVC framework (Spanish)
 
Asp.net mvc
Asp.net mvcAsp.net mvc
Asp.net mvc
 
Guia java script
Guia java scriptGuia java script
Guia java script
 
Curso de HTML5
Curso de HTML5Curso de HTML5
Curso de HTML5
 
Hola RoR
Hola RoRHola RoR
Hola RoR
 
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularDesarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
 
La magia de jquery
La magia de jqueryLa magia de jquery
La magia de jquery
 
Web components
Web componentsWeb components
Web components
 
Guia html2
Guia html2Guia html2
Guia html2
 
Definición y función de lenguaje java script
Definición y  función de lenguaje java scriptDefinición y  función de lenguaje java script
Definición y función de lenguaje java script
 
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
 
primefaces cortesia del portal de java
primefaces cortesia del portal de javaprimefaces cortesia del portal de java
primefaces cortesia del portal de java
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
Introduccion a AngularJS
Introduccion a AngularJSIntroduccion a AngularJS
Introduccion a AngularJS
 
Curso de Desarrollo Web de Platzi
Curso de Desarrollo Web de PlatziCurso de Desarrollo Web de Platzi
Curso de Desarrollo Web de Platzi
 
DotNet 2019: Optimizando Apps con Xamarin.Forms
DotNet 2019: Optimizando Apps con Xamarin.FormsDotNet 2019: Optimizando Apps con Xamarin.Forms
DotNet 2019: Optimizando Apps con Xamarin.Forms
 
09b jsf (1)
09b jsf (1)09b jsf (1)
09b jsf (1)
 
Angular js
Angular jsAngular js
Angular js
 
Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)Taller MVVM Imagine Camp Medellín (Intermedio)
Taller MVVM Imagine Camp Medellín (Intermedio)
 

Destacado

Desarrollador c,c++
Desarrollador c,c++Desarrollador c,c++
Desarrollador c,c++202527
 
Javascript: potenciando la web desde 1995
Javascript: potenciando la web desde 1995Javascript: potenciando la web desde 1995
Javascript: potenciando la web desde 1995ADWE Team
 
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?Micael Gallego
 
JavaScript para Programadores Java
JavaScript para Programadores JavaJavaScript para Programadores Java
JavaScript para Programadores JavaCarlos A. Iglesias
 
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009Micael Gallego
 
Javascript: Particularidades del Lenguaje, DOM, Eventos y AJAX
Javascript: Particularidades del Lenguaje, DOM, Eventos y AJAXJavascript: Particularidades del Lenguaje, DOM, Eventos y AJAX
Javascript: Particularidades del Lenguaje, DOM, Eventos y AJAXIrontec
 
Javascript 1
Javascript 1Javascript 1
Javascript 1Juan C
 
Lenguaje de programación java
Lenguaje de programación javaLenguaje de programación java
Lenguaje de programación javaChikito304
 
Javascript para principiantes -Introducción
Javascript para principiantes -IntroducciónJavascript para principiantes -Introducción
Javascript para principiantes -IntroducciónOscar Josué Uh Pérez
 
Aprende JavaScript
Aprende JavaScriptAprende JavaScript
Aprende JavaScriptAlf Chee
 
#PlatziConf - El camino para ser un Pro en JavaScript
#PlatziConf - El camino para ser un Pro en JavaScript#PlatziConf - El camino para ser un Pro en JavaScript
#PlatziConf - El camino para ser un Pro en JavaScriptCarlos Azaustre
 
Configuración de NetBeans para Java, C y C++
Configuración de NetBeans para Java, C y C++Configuración de NetBeans para Java, C y C++
Configuración de NetBeans para Java, C y C++victorconejo80
 
Java y sus caracteristicas
Java y sus caracteristicasJava y sus caracteristicas
Java y sus caracteristicasAny Saula
 

Destacado (20)

Desarrollador c,c++
Desarrollador c,c++Desarrollador c,c++
Desarrollador c,c++
 
Javascript: potenciando la web desde 1995
Javascript: potenciando la web desde 1995Javascript: potenciando la web desde 1995
Javascript: potenciando la web desde 1995
 
Java script
Java scriptJava script
Java script
 
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
JavaScript para Javeros. ¿Cómo ser moderno y no morir en el intento?
 
JavaScript para Programadores Java
JavaScript para Programadores JavaJavaScript para Programadores Java
JavaScript para Programadores Java
 
Introducción a Javascript I
Introducción a Javascript IIntroducción a Javascript I
Introducción a Javascript I
 
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009Desarrollo centrado en tareas en Eclipse con Mylyn 2009
Desarrollo centrado en tareas en Eclipse con Mylyn 2009
 
Lenguaje objective c
Lenguaje objective cLenguaje objective c
Lenguaje objective c
 
Javascript: Particularidades del Lenguaje, DOM, Eventos y AJAX
Javascript: Particularidades del Lenguaje, DOM, Eventos y AJAXJavascript: Particularidades del Lenguaje, DOM, Eventos y AJAX
Javascript: Particularidades del Lenguaje, DOM, Eventos y AJAX
 
Javascript
JavascriptJavascript
Javascript
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
 
Lenguaje de programación java
Lenguaje de programación javaLenguaje de programación java
Lenguaje de programación java
 
Javascript para principiantes -Introducción
Javascript para principiantes -IntroducciónJavascript para principiantes -Introducción
Javascript para principiantes -Introducción
 
manual java
manual javamanual java
manual java
 
Metaprogramación en JavaScript
Metaprogramación en JavaScriptMetaprogramación en JavaScript
Metaprogramación en JavaScript
 
Aprende JavaScript
Aprende JavaScriptAprende JavaScript
Aprende JavaScript
 
#PlatziConf - El camino para ser un Pro en JavaScript
#PlatziConf - El camino para ser un Pro en JavaScript#PlatziConf - El camino para ser un Pro en JavaScript
#PlatziConf - El camino para ser un Pro en JavaScript
 
Configuración de NetBeans para Java, C y C++
Configuración de NetBeans para Java, C y C++Configuración de NetBeans para Java, C y C++
Configuración de NetBeans para Java, C y C++
 
JavaScript Avanzado
JavaScript AvanzadoJavaScript Avanzado
JavaScript Avanzado
 
Java y sus caracteristicas
Java y sus caracteristicasJava y sus caracteristicas
Java y sus caracteristicas
 

Similar a Javascript en proyectos reales: jQuery (20)

Introducción a JQuery
Introducción a JQueryIntroducción a JQuery
Introducción a JQuery
 
En 20 minutos ... jQuery
En 20 minutos ... jQueryEn 20 minutos ... jQuery
En 20 minutos ... jQuery
 
(Muy breve) Introduccion a jQuery
(Muy breve) Introduccion a jQuery(Muy breve) Introduccion a jQuery
(Muy breve) Introduccion a jQuery
 
Taller de Jquery
Taller de JqueryTaller de Jquery
Taller de Jquery
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Seminario jquery, html5 y wicket
Seminario jquery, html5 y wicketSeminario jquery, html5 y wicket
Seminario jquery, html5 y wicket
 
J query
J queryJ query
J query
 
Charla Jquery
Charla JqueryCharla Jquery
Charla Jquery
 
Javascript Clásico
Javascript ClásicoJavascript Clásico
Javascript Clásico
 
jQuery 1.3 UI eghost Julio2009
jQuery 1.3 UI eghost Julio2009jQuery 1.3 UI eghost Julio2009
jQuery 1.3 UI eghost Julio2009
 
Rails intro
Rails introRails intro
Rails intro
 
Accesibilidad práctica con HTML5, CSS3 y WAI-ARIA
Accesibilidad práctica con HTML5, CSS3 y WAI-ARIAAccesibilidad práctica con HTML5, CSS3 y WAI-ARIA
Accesibilidad práctica con HTML5, CSS3 y WAI-ARIA
 
JQuery Mvc
JQuery   MvcJQuery   Mvc
JQuery Mvc
 
Jquery
JqueryJquery
Jquery
 
JAVASCRIPT.pptx
JAVASCRIPT.pptxJAVASCRIPT.pptx
JAVASCRIPT.pptx
 
jQuery y ASP
jQuery y ASPjQuery y ASP
jQuery y ASP
 
Barcelona Workshop 2008
Barcelona Workshop 2008Barcelona Workshop 2008
Barcelona Workshop 2008
 
De HTML a Express
De HTML a ExpressDe HTML a Express
De HTML a Express
 
Javascript
JavascriptJavascript
Javascript
 
Ruby On Rails Intro
Ruby On Rails IntroRuby On Rails Intro
Ruby On Rails Intro
 

Último

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilJuanGallardo438714
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxlosdiosesmanzaneros
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 

Último (15)

Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 

Javascript en proyectos reales: jQuery

  • 1. Javascript en proyectos reales Nuevos estándares Web Máster en Ingeniería Web David Arango Maroto Universidad de Oviedo Simplelógica
  • 2. Javascript en los 90s http://www.dynamicdrive.com/dynamicindex9/noright.htm
  • 3. Javascript en la actualidad (mayormente) ● Compatibilidad ● Portabilidad ● Código no intrusivo – No hay consenso sobre la definición – Separación entre capas – Evitar incompatibilidad – Graceful degradation
  • 4. Javascript en la actualidad ● Demanda de expertos: – 607 ofertas buscando en www.tecnoempleo.com – http://jobs.jsninja.com/ ● Requerimientos Javascript en proyectos reales ● Mucho buzz por la llamada “Web 2.0”
  • 5. ¿Cómo quieres escribir Javascript? - Dificultad + Drop-in From scratch
  • 6. ¿Por qué usar librerías? ● Simplifican el trabajo con Javascript – Múltiples niveles de DOM – Diferentes implementaciones en navegadores ● Agilidad
  • 7. Librerías ● Prototype ● Dojo ● moo.fx ¡NO FRAMEWORKS! ● YUI ● Jquery ● ...
  • 8. Librerías – 2007 jQuery 38% YUI 17% Prototype 45% http://ajaxian.com/archives/nitobi-survey-results-on-ajax-development
  • 9. Librerías – 2008 jQuery 37% Prototype 37% YUI 26% http://ajaxian.com/archives/2007-ajax-tools-usage-survey-results
  • 10. Prototype vs jQuery ● Prototype: – Extiende los objetos de DOM y de Javascript. – Añade un montón de objetos extra. – Muy sólida. ● jQuery – Totalmente encapsulada en un sólo objeto. – Permite encadenado de métodos. – Realmente sencilla e intuitiva.
  • 11. jQuery ● “Haz más con menos código” ● 2006, John Resig ● Todo lo que necesitas: – Selección de elementos del DOM – Manejo de eventos http://ejohn.org/about/ – API ajax – Animaciones (básicas)
  • 12. jQuery (somos fans) ● Estupenda documentación ● Comunidad sólida – http://docs.jquery.com/Discussion – http://lists.scriptia.net/listinfo.cgi/jquery-es-scriptia.net ● Variedad de plugins ● Integración con RoR – http://ennerchi.com/projects/jrails ● Libre, cobertura de tests, amplio soporte de navegadores...
  • 13. jQuery ¿por qué? ● Estilo de programación ● Manejo de eventos más sencillo ● Peso 80 70 73 60 54 50 40 30 20 10 0 Prototype jQuery Comprimidas con YUI Compressor http://developer.yahoo.com/yui/compressor/
  • 14. Lovely lovely jQuery ● Cuando empezamos con jQuery no había soporte RoR ● Los bindings javascript de RoR tenían problemas de accesibilidad ● jQuery hizo el trabajo, bueno, y nosotros ● Choan Gálvez fue el culpable: – http://choangalvez.nom.es/
  • 15. Al grano, la función jQuery ● La función jQuery encapsula toda la funcionalidad de la librería. ● Lo primero que debes saber es cómo agregar comportamiento en la carga del DOM ¡magia!: $(document).ready(function() { })
  • 16. Inciso: incluyendo scripts ● Hay sólo una forma de hacerlo bien, y no hace falta ser Neerlandés para utilizarla: <script type=”text/javascript”> // Cada vez que pones LANGUAGE Dios mata un gatito </script> Buenas prácticas
  • 17. Selección de nodos, CSS ● CSS – $('p.activo') – $('ul#menu li.activo') – $('ul#menu li:first') – $('ul#menu li:odd') – $('ul#menu li:eq(3)')
  • 18. Selección de nodos, CSS3 $('div[id^=quot;contentquot;]') Elementos div cuyo id empieza por “content” Más en: http://www.456bereastreet.com/archive/200601/css_3_selectors_e
  • 19. Moviéndonos por el DOM ● parents() y parent() ● prev(), prev('a') ● next() ● siblings()
  • 20.
  • 21. Inciso: literal de objeto ● Utiliza el literal de objeto, es una forma de encapsular tu código: mi_app = { init: function() { // Cosas } } Buenas $(document).ready(mi_app.init); prácticas
  • 22. Colecciones de nodos ● Con una selección de nodos podemos... – Recorrerla: ● $('input').each(function() { alert(this.value) }) – Hacer modificaciones: ● $('p').hide() ● $('p').addClass('activo') ● $('p:odd').show().addClass('odd').append('<strong>Yeah! </strong>) ● ...
  • 23. Trabajando con la colección
  • 24. Modificación de attributos ● attr() hace sencillo el trabajo con atributos: – $('p').attr('title') // Retorna el valor del atributo para el primer elemento encontrado – $('p.destacado').attr('title', 'Destacado') // Asigna el valor al atributo de todos los elementos de la colección ● removeAttr() ● addClass(), removeClass, hasClass() hacen el resto
  • 25. Manipulación de contenidos ● Obtener y cambiar contenido – html() text() val() (getters y setters) ● Inserciones – after() before() // Insertar fuera – append() prepend() // Insertar dentro – wrap()
  • 26. Modificación de estilos ● css() nos hace el trabajo: – $('p').css('color', 'red') – $('p.destacado').css({ color: 'red', background-color: 'blue'}) ● Ojito con la separación entre capas
  • 27. Inciso: usa siempre var ● Las variables en Javascript tienen ámbito global o local dependiendo de si se han creado con la palabra clave var: numero = 42 // Yo soy global var numero = 42 // Yo soy local Buenas prácticas
  • 28. Ejemplo: cebrear tabla ● Crear una tabla y aplicarle un color diferente a las filas pares e impares siguiendo los preceptos de la separación entre capas.
  • 29. Efectos ● hide() y show() ● slideDown(), slideUp() ● fadeIn() y fadeOut ● Permiten añadir comportamiento al terminar la animación: – $('p').slideDown(2000, function() { alert('Fin') })
  • 30. Ejemplo: ocultar párrafos ● Documento con una serie de párrafos. ● Insertar enlaces antes de cada párrafo que permitan ocultar y desplegar.
  • 31. Sobre el cierre del elemento <script> ● Según el apéndice C de la especificación XHTML 1.0: C.3 Element Minimization and Empty Element Content Given an empty instance of an element whose content model is not EMPTY (for example, an empty title or paragraph) do not use the minimized form (e.g. use <p> </p> and not <p />). http://www.w3.org/TR/xhtml1/#guidelines
  • 32. Manejo de eventos ● $('p').bind('click', function() { alert('Click') }) ● blur, focus, load, resize, scroll, unload, beforeunload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error ● Muchos tienen shortcuts: – $('a:first').click(mostrar_parrafos)
  • 33. Manejo de eventos ● Si el callback del evento retorna false se cancela el burbujeo y el comportamiento por defecto de dicho evento: $('a:first').click(function() { // El navegador no sigue el enlace return false; });
  • 34. Inciso: burbujeo de eventos ● ¿Qué pasa cuando dos elementos anidados tienen comportamiento para un mismo evento? Captura Burbujeo 1 2 http://www.quirksmode.org/js/events_order.html
  • 35.
  • 36. preventDefault versus return(false) ● return(false) evita la propagación del evento y cancela su comportamiento por defecto. ● En ocasiones no querremos cancelar el burbujeo: $('a').click(function(e) { e.preventDefault(); }); ● Si queremos evitar la propagación sin cancelar el comportamiento por defecto: stopPropagation()
  • 37. Ojo ● return(false) no frenará el comportamiento por defecto si ocurre un error javascript antes: $('a').click(function() { funcion_inexistente(); return(false); // El enlace seguirá su curso // Un preventDefault hubiera hecho el trabajo }); Buenas prácticas
  • 38. Ejemplo: menú de acordeon ● Empezamos con una lista de enlaces anidada. ● Los enlaces de primer nivel deben ser agrupadores. ● Al hacer click sobre un enlace de primer nivel se despliega la lista de enlaces que contiene.
  • 39. Ejemplo: tabtastic ● Típica lista de contenidos con pestañas.
  • 41. AJAX
  • 42. Inciso, diálogos HTTP ● Presentación sobre diálogos HTTP. ● Analizar la Fisgona de Menéame.
  • 43. AJAX ? Asynchronous Javascript And XML
  • 44. Ajax en minúsculas ● Más que un acrónimo, es una forma de interacción. ● Carga asincrónica de datos, con o sin interacción del usuario.
  • 48. Ajax con jQuery: load() load(uri)
  • 49. Ejemplo: hola mundo ajax ● Escribir una página web con una lista de enlaces a páginas locales. ● Cargar el enlace vía ajax en un div insertado a continuación. ● Copiar el ejemplo a servidor HTTP local, analizar con firebug las cabeceras HTTP.
  • 50. Ajax avanzado en jQuery : ajax() $.ajax({ url: url, dataType: 'xml', success: function(msg) { // Éxito } });
  • 51. Ejemplo: ajax con xml ● ¡Lo de antes era AHAH! http://en.wikipedia.org/wiki/AHAH ● Intentar el ejemplo anterior con XML como tipo de datos.
  • 52. Tests de unidad: jShoulda http://jshoulda.scriptia.net/
  • 53. Tests de aceptación: Selenium http://seleniumhq.org/ http://www.vimeo.com/2343914