Desarrollo de Aplicaciones I - Unidad 2 - Andrade
Desarrollo de Aplicaciones I - Unidad 2 - Andrade
jQuery
Asignatura
Desarrollo de Aplicaciones I
Universidad Provincial del Sudoeste
Autor
Lic. Mauricio Andrade
Copyright © 2020 U.P.S.O.
Universidad Provincial del Sudoeste de la Provincia de Buenos Aires
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 1 de 46
ICONOGRAFÍA DE LOS DOCUMENTOS TEÓRICOS
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 2 de 46
DOCUMENTO TEÓRICO
Unidad 2. jQuery
Asignatura: Desarrollo de Aplicaciones I
Autor: Lic. Mauricio Andrade
ÍNDICE DE CONTENIDOS
1. INTRODUCCIÓN ................................................................................................... 5
8. DATOS ................................................................................................................ 27
10. EVENTOS............................................................................................................ 30
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 3 de 46
14. JQUERY CON CDN............................................................................................. 42
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 4 de 46
Unidad Nº2. jQuery
1. INTRODUCCIÓN
En primera instancia se comenzará viendo cómo trabajar con jQuery, su notación y las
funcionalidades que provee. Si bien, para obtener el mejor provecho de esta librería se
requiere un buen manejo de JavaScript, se irá adquiriendo experiencia a medida que
se avance.
Siempre se deberá tener presente si lo que se desea realizar con jQuery es posible
realizarlo con JavaScript codificando prácticamente la misma cantidad de código, pues
cada librería que se incluya al sitio hará que este tarde más en cargarse.
Por último, se terminarán viendo varios plugins o librerías que se apoyan en jQuery
para brindar nuevas funcionalidades, facilitando el desarrollo de proyectos más
complejos, evitando pensar cómo implementar algo que ya está hecho, solo habrá que
saber cómo usarlo.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 5 de 46
2. ¿QUÉ ES JQUERY?
Las ventajas a la hora de desarrollo de las aplicaciones, así como las puertas que abre
jQuery compensan extraordinariamente el peso del paquete.
Además, todas estas ventajas son gratis, ya que jQuery tiene licencia para uso en
cualquier tipo de plataforma, personal o comercial. Para ello, simplemente se debe
incluir en las páginas un script JavaScript que contenga el código de jQuery, que se
puede descargar del propio sitio del producto y comenzar a utilizar el framework.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 6 de 46
jQuery brinda funcionalidades que facilitan la tarea del desarrollador y permite
implementar códigos concisos (scripts de pequeño tamaño). Sin embargo, su sintaxis
puede hacer dudar a unos cuantos sobre la lógica del script, hay que leer la
documentación del método utilizado o realizar un par de pruebas para entender el
comportamiento.
jQuery agrega un nivel de abstracción que hace que el programador deba entender
cómo funciona más jQuery que el lenguaje JavaScript en sí.
Pero, por otro lado, resulta tener una curva de aprendizaje bastante rápida, ya que no
se mete con toda la potencia de JavaScript. Y, en este punto de la carrera, lo que se
busca, es poder implementar rápidamente una aplicación Web, impidiendo los tiempos
de cursado, conocer a fondo el lenguaje JavaScript.
Una alternativa muy potente y más clara de programar (sintaxis más legible), es el
framework MooTools, pero al requerir un mayor conocimiento de JavaScript
(programadores intermedios y avanzados) y tener una curva de aprendizaje más larga,
queda fuera de alcance por el momento.
jQuery, por ser el más ampliamente usado, provee más funcionalidades de terceros,
facilitando aún más las tareas de los programadores y una comunidad más grande
dispuesta a colaborar con tutoriales, ejemplos y foros. Solo basta abrir varios sitios al
azar y ver dentro del <head> qué framework están utilizando.
3. INCLUIR JQUERY
Antes de comenzar a escribir los primeros scripts con jQuery, es necesario hacerlo
disponible en la página. Para esto, se debe ir al sitio oficial y descargar el framework.
El sitio ofrece básicamente dos variantes, una de producción con el código minificado
(jquery-3.5.1.min.js) y otra de desarrollo (jquery-3.5.1.js) en un formato más legible
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 7 de 46
pero que ocupa más espacio. La idea es utilizar la versión de desarrollo durante la
implementación del proyecto, lo cual permite acceder a la librería jQuery y observar el
código con fines depurativos o de análisis, y la de producción al momento de realizar
el deploy.
Además, se incluye una alternativa que jQuery denomina slim, que contiene solo las
funcionalidades básicas, dejando fuera los módulos de AJAX y Efectos; también en
sus versiones de producción (jquery-3.5.1.slim.min.js) y desarrollo (jquery-
3.5.1.slim.js).
Hay que tener presente que los scripts se van cargando a medida que se interpreta el
documento Web, por lo tanto, debe estar antes que algún otro script lo utilice.
Esta referencia no es un enlace como cualquier otro, aunque lo parezca, sino que se
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 8 de 46
trata de un CDN (Content Delivery Network), el cual ofrece beneficios de performance
alojando jQuery en servidores ubicados en distintas partes del planeta.
El número de versión que se utiliza de jQuery es tan importante y quizá más que el
tipo de copia (producción, desarrollo o slim). Este número hay que tenerlo presente ya
que el framework evoluciona incluyendo nuevas funcionalidades y optimizando otras.
Además, debe tenerse en cuenta que ciertas funcionalidades nuevas reemplazan a
otras, las cuales dejan de estar disponibles.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 9 de 46
Puede ocurrir que una funcionalidad que se utiliza en el desarrollo del sitio ya no esté
en la nueva versión, habrá que analizar si cambiar el código o continuar con la versión
jQuery utilizada hasta el momento.
Actualmente, Internet es el mejor recurso para aprender, más con este tipo de
herramientas, pero debe tenerse en cuenta que el código que se está estudiando sea
lo más actual posible, pues puede contener funcionalidades obsoletas o removidas.
4. LA FUNCIÓN $()
La selección de los elementos HTML puede ser mediante el nombre, tipo, valor o
propiedades de los atributos de los elementos, tiene mucha semejanza con los
selectores CSS. Pero a esta función también se le puede pasar otra función, la cual se
ejecutará cuando el DOM esté listo, o un código HTML para incluir dentro de otro
elemento HTML, como ser un <div>.
Las formas de seleccionar un elemento del DOM son muy variadas, se pueden utilizar
distintas maneras para alcanzar un determinado nodo, y esto afectará al rendimiento
de la página. Utilizar la forma más apropiada lo dará la experiencia y la información
que se tenga del nodo. Por ejemplo, si se cuenta con el valor del atributo id se podrá
acceder directamente al nodo deseado, pero si solo se tiene el tipo de elemento, quizá
haya que buscar entre varios hasta alcanzar el que tenga el valor deseado en alguno
de sus atributos.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 10 de 46
A medida que se avance en la lectura de este material se irán presentando distintos
selectores y las funcionalidades de $(), pero siempre quedará en el alumno ir por
más.
jQuery provee mucho más de lo que se puede ver en este material, además surgen
nuevas funcionalidades todo el tiempo. Este material sienta las bases para poder
comprender y utilizar el framework, analizar códigos implementados por terceros y
utilizar otras API’s basadas en jQuery.
La API provee distintas funcionalidades para manipular los estilos a un elemento, una
de estas, es agregar o quitar una clase CSS a un elemento HTML.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 11 de 46
Se describen las líneas del código:
Línea 11: se observa primeramente que la API jQuery es local, y se trata de una
copia completa de desarrollo. Además, como debe ser, esta se incluye en el
documento antes de usarse.
Línea 13: se selecciona la raíz del DOM y se ejecuta el método ready(), esto
garantiza que lo que está entre los paréntesis se ejecute una vez que se hayan
cargado todos los elementos del DOM. Esta línea se puede reemplazar por una
versión más corta:
El método ready() lanza el evento que se le pasa como parámetro, que en este caso
se trata de una función anónima, la función se define en el mismo argumento, desde
las líneas 13 a 20.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 12 de 46
pestaña tiene su propio objeto window, sin embargo algunos métodos y propiedades
pertenecen a la ventana, es decir a todas las pestañas, como ser window.resizeTo.
No se ahondará en este objeto, pero se deja la inquietud para que se investigue de
forma individual.
Línea 14: el método $() selecciona a todos los elementos de enlace, obsérvese que
se indica entre comillas (simples o dobles), y luego se invoca el método
mouseover(), que define una función. El método referenciado es el nombre de un
evento, que lanza la función al ocurrir una acción sobre le objeto. Nuevamente, la
función es anónima y se define en el mismo parámetro.
El resto de las líneas no hace falta describirlas. Otros métodos que provee jQuery son
toggleClass() y hasClass().
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 13 de 46
5.1. El método css()
Una forma más minuciosa de manipular estilos con jQuery es mediante el método
css(), el cual aplica estilos al elemento seleccionado en una variedad de formas y
permite consultar sus estilos.
La sección del encabezado no necesita explicación, tampoco las primeras líneas del
cuerpo, y como se recomienda, el script jQuery figura justo antes del cierre de esta
sección.
Línea 21: En este punto se define una función para el evento click para todos los
elementos div de la página.
Primeramente se selecciona al elemento que lanzó el evento (el click), que para
evitar consultar todo el árbol de nodos, se lo referencia con $(this). Esto permite
seleccionar al elemento que se está definiendo.
Luego se invoca al método css() que realiza una declaración de estilo, cuyo
primer parámetro es la propiedad CSS (margin-top) y el segundo el valor que
tomará.
Por último, el método css() se utiliza a modo de consulta, y se muestra en consola
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 14 de 46
el valor de una propiedad. En consola se podrá apreciar que jQuery unifica la
manera en que se muestran los valores, sin importar cómo estén definidos, la salida
tendrá un mismo formato, en este caso como rgb().
5.2. Particularidades
jQuery admite la notación sin guión para separar palabras, es decir que
css(“margin-top”) es equivalente a css(“marginTop”), nótese la distinción
entre mayúsculas y minúsculas, pues jQuery está programado en JavaScript.
Se puede quitar una propiedad de estilo indicando como valor la cadena vacía,
como ser css(“color”,””). Menos aquellas que se hayan definido en una hoja
de estilos o utilizando las etiquetas <style>. Estas se pueden modificar pero no
quitar.
Los valores asignados a una propiedad pueden ser relativos al valor que ya posee
la propiedad. Por ejemplo, se podría desplazar la caja 5 pixeles hacia abajo en cada
click teniendo en cuenta el margen superior, solo habría que sustituir la línea 22
por: $(this).css("margin-top","+=5");
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 15 de 46
JavaScript. El primero devuelve un número al azar entre 0 y 1 (excluyente), mientras
que el segundo retorna la parte entera de un número, redondeando hacia abajo.
La función que retorna el valor para la propiedad indicada en el método css(), puede
tener dos argumentos. El primero hará referencia a la posición del elemento en el
conjunto de elementos seleccionados y el segundo al valor actual de la propiedad
indicada.
El valor que obtendrá el argumento valor, será 5px, pero el valor para índice
variará según el orden del elemento. Como el selector $(“div”) arma un conjunto de
cuatro elementos, índice tendrá los valores 0, 1, 2 y 3 los cuales serán multiplicados
por 50, dejando a las cajas de forma escalonada.
El método css() también puede recibir un arreglo como primer argumento, lo cual
dará al segundo parámetro de la función el valor de cada propiedad.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 16 de 46
En el navegador, al hacer click sobre alguna de las cajas, se observa en la consola los
distintos valores de las propiedades:
Nótese que la salida del argumento index que figura al comienzo de la consola, es
cero, esto es porque solo se están mostrando los valores de un único elemento, el
referenciado por $(this), el que recibió el click.
El método css() acepta la misma notación que los estilos, donde el operador de
asignación son los dos puntos :, acá el ejemplo estableciendo estilo con pares de
valores:
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 17 de 46
Se puede apreciar que el código resultante en el navegador asigna la unidad pixeles al
valor numérico 25, mientras que mantiene como em al que se indicó como string.
También se puede ver que la propiedad marginTop no necesita comillas por tratarse
de una sola palabra, mientras que margin-left sí.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 18 de 46
Más que incluir un texto, se está sustituyendo el contenido del nodo seleccionado,
haciendo que los botones desaparezcan.
¿Cómo lo modificarías para que cambie el texto del párrafo sin que
desaparezcan los botones? Tip: Podés utilizar el selector de nodo hijo > para
llegar al elemento p.
Nótese que en este caso, el código jQuery, se ha utilizado directamente desde los
elementos HTML, sin la necesidad de definirlos en un script aparte como en los
ejemplos anteriores. Esta práctica no suele utilizarse ya que no separa el contenido,
maquetación y scripts, lo que puede dificultar el mantenimiento del código.
En caso de llamar al método html() sin parámetro, este devolverá el contenido del
elemento.
Es posible quitar nodos del DOM, para esto se debe seleccionar el nodo y luego
invocar el método remove(). También se pueden agregar nuevos elementos hijos al
nodo seleccionado mediante append().
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 19 de 46
Código HTML
Código jQuery
Línea 7: se indica que el código jQuery de la función podrá acceder a los nodos del
DOM una vez que todos los elementes se hayan cargado.
Línea 9: se define un manejador (handler) para el evento click que podría ocurrir
en el botón identificado como add-btn. La idea es que al hacer click sobre el botón
Agregar, se incorpore un nuevo ítem.
Línea 10: solo la primera vez que se agrega un ítem debe incluirse el elemento ul y
un texto. El contador, además se utiliza para identificar los ítems que se van
agregando, esto permite luego identificarlos unívocamente.
Línea 14: se agrega el ítem mediante el elemento li. Nótese que el ítem se anexa
como hijo de ul. El texto que se coloca en el ítem es el escrito en la caja de texto, al
cual se accede mediante el método val().
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 20 de 46
Línea 15: ahora, solo resta poder eliminar cada ítem, para esto, a cada uno se le
define el evento click. Nótese la utilización del selector $(this), este elemento, el
que recibe el evento es el que se elimina.
También es posible eliminar todos los hijos de un nodo, sin eliminar el nodo en sí, para
esto se puede utilizar el método empty(). Por ejemplo, se podrían eliminar todos los
ítems con la línea $(„ul‟).empty(). Si bien en el ejemplo también funcionaría
$(„li‟).remove(), la diferencia radica que con empty() se eliminan todos los
nodos hijos sin importar el tipo, mientras que con la segunda opción se borran solo los
li.
La función $() acepta un nodo del DOM, un elemento HTML o una función
de callback, no se puede indicar solamente texto.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 21 de 46
Otros métodos más sutiles permiten incorporar nodos DOM antes o después de los
elementos seleccionado, mediante before() o after() respectivamente; con la
particularidad que si los elementos ya existen, se mueven, no se crea una copia de
ellos.
El siguiente código intercambia la posición del párrafo por debajo y por encima del
botón.
El siguiente ejemplo selecciona a todos los elementos que contengan la clase CSS
ítem y reemplaza esos elementos por un texto en itálica.
Código HTML
Código jQuery
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 22 de 46
Antes de presionar el botón Luego de presionar el botón
7. PROPIEDADES Y ATRIBUTOS
Antes de ver los métodos que provee jQuery para la manipulación de atributos, hay
que entender bien a qué cosas llama jQuery atributos y a cuáles propiedades, pues
hasta ahora, si se han mencionado, ha sido de manera indistinta.
Bueno, realmente no se pretende que lo anterior sea del todo clarificante, pero se
puede aclarar un poco más con una regla nemotécnica, por llamarla de alguna
manera:
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 23 de 46
attr(): se usará para modificar atributos tales como class, id, href,
label, src, title..
Las propiedades en los elementos HTML son booleanos, obteniendo un valor por
defecto en su ausencia, y otro si están presentes.
En el ejemplo solo se utiliza el método prop(), primero para verificar el valor de una
propiedad y luego para establecerle un valor.
jQuery provee el método removeProp() para remover una propiedad, y quizá alguien
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 24 de 46
se sienta tentado utilizar removeProp(„disabled‟), pues se sabe que la ausencia
de esta propiedad indica que el elemento está habilitado. Sin embargo, jQuery no
recomienda eliminar propiedades nativas, pues una vez hecho esto no podrán
agregarse; por esta razón debe utilizarse prop().
Sin embargo, está permitido quitar propiedades que se hayan incorporado mediante
prop(). Considérese la siguiente porción de código:
Línea 11: se hace referencia a un elemento mediante la variable msj, lo cual es una
buena opción cuando la regla de selección es extensa, se debe referenciar varias
veces o puede cambiar en distintas instancias del script.
Línea 13: se agrega un nodo hijo (un texto) al elemento seleccionado, donde se
consulta el valor de la nueva propiedad. Aquí es necesario llamar al método prop()
mediante la variable msj, pues se está dentro de otro método, y el ámbito es distinto.
En el navegador se tendría:
Obsérvese la notación utilizada para llamar a varios métodos de una selección. Las
llamadas se van sucediendo una a continuación de otra (en cadena), nótese que el
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 25 de 46
punto y coma para finalizar la sentencia está recién al final. Esta forma ahorra código,
y crea una visión más clara, muchas veces suelen incluirse una a continuación de otra
en una misma línea.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 26 de 46
8. DATOS
jQuery permite establecer un mismo dato a todos elementos seleccionados, pero esta
asignación es por referencia. Esto quiere decir, que todos los elementos contendrán el
mismo dato, y si este se modifica, se modificará en todos. Entonces, el valor asignado
a un dato puede ser el mismo físicamente a todos los elementos seleccionados.
Línea 23: se define un objeto con dos propiedades y se guarda en la variable info
Línea 27: se crea el dato informacion y se le asigna como valor la variable info
a todos los elementos li contenidos dentro de un elemento ul.
Línea 28: se establece el valor 120 la propiedad precio del objeto info, este
cambio afecta a todos los elementos li contenidos en un ul, pues todos hacen
referencia a un mismo objeto.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 27 de 46
frut se le reemplaza el contenido del dato informacion con otro objeto, el cual
tiene una única propiedad, variedad con el valor „frutas‟. En este punto, cada
elemento del conjunto cuenta con un objeto diferente.
Línea 30: solo al elemento identificado como v_tom se le asigna un nuevo dato bajo
el nombre precio con el valor 120. Ahora este elemento cuenta con dos datos,
nótese que no se está haciendo referencia a info.precio.
Línea 23: se elimina el dato precio del elemento identificado como v_tom
9. RECORRIENDO LA SELECCIÓN
A esta altura ya se sabe que la función jQuery devuelve un objeto, que se trata de un
conjunto de elementos HTML, JavaScript implementa este conjunto con arreglos, es
decir que cuenta con un índice numérico.
Este índice se utilizó por primera vez en este material en la sección 5.2 con el
siguiente ejemplo:
Esto permite acceder a una posición determinada del conjunto seleccionado, utilizando
la notación de arreglos de JavaScript:
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 28 de 46
Analizá el código anterior, y realizá las pruebas suficientes para entender
su comportamiento, notá que el objeto referenciado se mueve de lugar, no se
crea una copia.
Ese índice puede ir variando por lo cual podría accederse a cada elemento con alguna
función iterativa. Pero eso sería meterse con la estructura en como implementa jQuery
al conjunto selección. Para poder manipular mejor estos elementos, el framework
brinda una serie de métodos, tal como los provistos para los arreglos en JavaScript.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 29 de 46
Solo se aclarará que si la función definida dentro del each retorna true funciona
como un continue en cualquier otra sentencia de iteración, y si retorna false, es
similar a un break. Esto se puede notar en el subrayado de las verduras.
10. EVENTOS
Para analizar cómo jQuery define un manejador de eventos (listener en JS), se recurre
al primer ejemplo visto en este material:
Se define un evento sobre todos los elementos de enlace. Luego del selector se indica
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 30 de 46
el tipo de evento, en este caso mouseover().Existen diferentes tipos de funciones
que implementan cada uno de los eventos normales, como click(), dblclick(),
focus(), keydown(), etc.
Como parámetro en la función mouseover() o similares hay que pasar una función,
ya sea su nombre o la definición de la misma, como en el ejemplo
La función que se envía por parámetro con el código del evento, en este caso la
función a ejecutar al pasar el puntero del mouse por encima del enlace, tiene a su vez
otro parámetro que es el propio evento que se está manejando. En el código anterior
se asigna a la variable event el evento que se está ejecutando y a través de esa
variable se tiene acceso a varias propiedades y métodos para personalizar aún más
los eventos.
Se pueden definir manejadores para distintos eventos según la fuente de este, como
ser del ratón (click, hover, mouseup, mouseout, etc.), del teclado (keydown.
Keypress y keyup) o de cualquiera de los dos (focus, focusin y focusout).
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 31 de 46
10.1. Objeto Event
El objeto contendrá información como qué tipo de evento es (type) y otras que
dependerán del evento ocurrido, por ejemplo en el caso de un evento del teclado,
puede indicar qué tecla se presionó.
Si se realiza una pulsación prolongada de una tecla este esquema varía, pues se
produce un keydown y luego un keypress. Mientras se mantiene pulsada la tecla en
bucle se van produciendo eventos keydown y keypress, repetidas veces hasta que
finalmente se suelta la tecla y se produce un keyup.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 32 de 46
Averiguá con qué otras teclas no se produce el evento keypress.
Cada tecla tiene un código numérico que la identifica, lo cual permite realizar alguna
acción según la tecla que presionó el usuario.
Puede ocurrir, como en el caso anterior, que se desee implementar una misma acción
para distintos eventos. Para esto jQuery provee el método on() que enlaza a uno o
varios elementos una función que implementa un evento.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 33 de 46
La asignación del manejador a los tres eventos del teclado del ejemplo anterior se
pueden resumir en:
Para desligar un manejador a un evento, se utiliza off(). Por ejemplo, para quitar
keyup:
1. En caso que existan muchos hijos, en este caso muchos li o una tabla con cientos
de filas donde a cada una se le asignen un par de manejadores de eventos; se
producirá una sobrecarga, un mismo código para un mismo tipo de elemento.
2. El otro inconveniente es que como se vió hasta ahora, el elemento debe existir en el
DOM.
Para solucionar ambos casos se debe utilizar la delegación de eventos. Esto, lo que
permite es definir el manejador de evento desde un ancestro, indicando que si ocurre
el evento de un elemento, este se propagará a un ancestro.
Ahora ya no es necesario asignar un manejador para el evento click cada vez que
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 34 de 46
se agrega un ítem. Nótese que la selección no se hace del futuro padre inmediato,
pues en el código original ul no existe aún, y la unión del manejador debe hacerse
con un elemento que exista en el DOM, y en este caso el que existe es el formulario…
el abuelo de los li.
La delegación debe definirse cuidadosamente, pues cada vez que ocurra el evento
este irá subiendo por el árbol DOM hasta encontrar al que define el manejador. En
páginas grandes esto es un gran consumo de recursos y hace lenta la página, siempre
debe definirse el manejador lo más cercano posible al elemento. En el caso anterior,
por ejemplo, se pudo haber creado un elemento ul vacío y utilizar este para crear el
manejador, y no desde el formulario.
Cuando ocurre un evento en un nodo del DOM, el mismo se propaga a sus ancestros.
Si se define un manejador en el nodo para ese evento, se ejecutará esa función y
luego se propagará el evento al ancestro. En caso de no desear que esto ocurra debe
detenerse la propagación. El objeto evento provee el método stopPropagation()
para evitar que el evento se pase a sus ancestros.
El objeto evento también puede contener datos personalizados que luego serán
accesibles mediante la propiedad data dentro de la función que se está definiendo.
Por ejemplo:
Primeramente, lo que llama la atención es que se han definido dos manejadores para
el mismo evento y el mismo elemento, uno identificado como test. Lo que sucede en
estos casos es que se lanzan los dos manejadores, el que se encuentre primero y
luego el otro.
Además, está el objeto que se pasa como argumento a on(), el cual se asigna como
valor a la propiedad data del evento, nótese la referencia e.data.nombre.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 35 de 46
11. ANIMACIONES
Las animaciones ofrecen al usuario una experiencia más atractiva, muchas de estas
pueden realizarse directamente con CSS, pero jQuery ofrece un mayor control, se
basa en reglas de estilo.
Debe tenerse en cuenta que la función que se especifique se llamará por cada
elemento al que se le aplique la animación. Siempre hay que recordar que jQuery
trabaja con una selección, y si esta involucra varios objetos, el método se llamará
sobre todos ellos.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 36 de 46
Modificando el ejemplo de la sección 5 de los cuadrados de colores, se podría incluir
una animación. Lo siguiente hace que se bajen todos los cuadrados conjuntamente.
Se coloca una función con un contador que mostrará la cantidad de veces que se
llama a esta función.
Sin embargo este método solo puede animar atributos con valores numéricos,
atributos como border y background son ignorados. Para este tipo de animaciones
es necesario utilizar jQuery-Color
Nótese que el método jQuery.Color devuelve un objeto color CSS, y recibe como
argumento un objeto con reglas de estilo.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 37 de 46
La última animación restaura el color original del cuadrado, que si bien no utiliza al
método jQuery.Color, hace uso del método anímate() de la librería jQuery-Color.
Widgets: Controles de interfaz de usuario con todas las funciones: cada uno tiene
una gama de opciones y es totalmente temático (acordeón, botón, menú,
desplazamientos, selectores, diálogos, calendarios, etc.).
Efectos: muchos efectos listos para usar (clip, drop, explode, shake, size, etc)
Esto no tiene que ver precisamente con jQuery, sino más bien con cualquier script que
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 38 de 46
se quiera incluir en la página. Además, tampoco es una propiedad de los script en sí,
sino del elemento <script>, por ende es de HTML.
Se sabe que los elementos HTML se van interpretando y ejecutando de la primer línea
a la última, en ese orden. Por esto, cuando JavaScript debe acceder a un nodo del
DOM, este debe existir, y la ejecución del script se coloca al final del documento Web
o verificando que el documento se haya cargado por completo. Lo mismo ocurre
cuando un script necesita de una funcionalidad desarrollada en otro script, este debe
cargarse antes que se requiera su uso.
Pero hay situaciones, en que el script puede cargarse en paralelo con otros elementos,
es decir, que la funcionalidad que provee no está ligada a otras. Este tipo de carga se
conoce como asincrónica, y HTML 5 provee el atributo async para esto. La carga de
esta manera permite que el navegador interprete otros elementos sin tener que
esperar la carga del script, este se ejecutará una vez cargado, cuando el navegador
pueda hacerlo.
La carga del script de esta manera permite organizar el código del documento Web,
pues en el encabezado se pueden indicar los script sin ralentizar la carga de la página.
Los script con la propiedad async pueden cargarse en cualquier orden, no dependen
unos de otros. Quizá uno se encuentre local en el servidor y otro en un servidor CDN.
Por ejemplo el que provee Google para analizar el tráfico de un sitio Web:
Otra propiedad booleana es defer, la cual indica que el script externo se ejecutará
luego de analizar todo el documento Web, pero antes de activar DOMContentLoaded.
El documento se considerará cargado por completo y listo cuando todos los script
diferidos estén cargados y ejecutados. Las cargas asincrónicas pueden ocurrir antes o
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 39 de 46
después de lanzarse el evento DOMContentLoaded.
A diferencia de async, los script con defer son ejecutados en el orden en que
aparecen en el documento, es decir, que si hay dos scripts externos diferidos, el orden
de carga será el que se encuentre primero de arriba hacia abajo en el código.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 40 de 46
Se deja el siguiente script como guía y un pequeño análisis del mismo:
Línea 23: se consulta por consola el estado de la carga del DOM (las salidas por
consola se ven más abajo).
Líneas 24 – 36: se define un manejador para cada cambio de estado de carga del
DOM. Se consulta el posible valor y se muestra la salida por consola.
Obsérvese que en la línea 27 se solicita la salida por consola en el caso que el estado
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 41 de 46
de carga sea loading, sin embargo el mensaje no se muestra. Esto sucede porque el
manejador para el evento onreadystatechange no ha cambiado, es decir, sigue
siendo loading. Por eso se incluye la línea 23.
Realizá algunas salidas por consola consultando los estados de carga del
objeto document en distintos puntos del documento Web. Incluí otro archivo
JavaScript externo con y sin la propiedad de carga diferida.
Ya se mencionó cómo usar jQuery con CDN, pero sin saber exactamente qué es un
CDN. Esta tecnología se trata de una red de entrega de contenidos compuesta por
diferentes servidores. Es decir, CDN hace referencia a un conjunto de servidores
ubicados en diferentes puntos geográficos que contienen copias de contenidos
alojados en otros servidores, y es un servicio del que se puede disponer en los
mejores proveedores de hosting. Por consiguiente, busca optimizar el acceso a la
información de Internet, puesto que el usuario llegará a aquellas copias de datos que
se encuentren más próximas a su posición.
La siguiente figura ilustra el servicio tradicional, donde cada cliente accede a una única
copia, en comparación con la opción que cada uno acceda a una copia más próxima a
él.
https://commons.wikimedia.org/w/index.php?curid=7868809
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 42 de 46
Por ejemplo, si se dispone de un sitio en Argentina, pero se tienen muchos
clientes en España, se podría contratar un servicio de CDN para disponer copias
del sitio alojadas en España.
Los CDN reducen el cuello de botella al evitar que todas las solicitudes se centren en
un solo lugar, además agilizan la navegación, ya que los datos se alojarán en lugares
más cercanos al cliente. Como ventaja adicional, y no menos importante, es la
disponibilidad; pues al existir varias copias, en caso que un servidor no sea accesible,
se podrá recurrir a otra copia en otro servidor. Y todo esto, totalmente transparente
para el usuario, y el desarrollo del sitio en sí.
Los sitios que ofrecen CDN se basan en la ubicación del cliente para localizar el
servidor más cercano que disponga una copia del recurso solicitado.
Por ejemplo, una mala práctica de hotlinking es desde una página enlazar
un video o imagen de otro servidor, esto se considera un robo de ancho de
banda, pues el recurso se estará descargando desde otro lugar.
Sin embargo, lo que se busca con CDN, es precisamente eso, que los diferentes sitios
hagan uso de hotlinking, pero con otros propósitos: disponibilidad y eficiencia en la
transferencia de recursos por Internet.
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 43 de 46
Google y Microsoft ofrecen recursos mediante CDN para apoyar el
desarrollo de aplicaciones Web ofreciendo varios recursos:
Google Code: https://developers.google.com/speed/libraries
Microsoft CDN: https://docs.microsoft.com/en-us/aspnet/ajax/cdn
Para el caso particular de jQuery podrían utilizarse alguno de los siguientes
enlaces:
https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js
https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.5.0.min.js
Sin embargo, no todas son ventajas, pues puede suceder que el que provee el recurso
cambie la URL, por ejemplo por un cambio de infraestructura o porque decidió no dar
más soporte a ese recurso. Entonces, es preciso verificar cada cierto tiempo que los
recursos que se utilizan en el sitio aún están disponibles, y una práctica inteligente es
tener una copia local en caso que el recurso no esté disponible.
Para esto último, se debe agregar la siguiente línea luego de la referencia al recurso,
en este caso jQuery, si no se puede descargar se utilizará la copia local:
1) ¿Qué es jQuery?
2) ¿En qué momento influye la carga de jQuery al visitar una página?
3) ¿Qué diferencias hay entre las distintas copias que ofrece jQuery para descargar?
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 44 de 46
4) ¿Cuál es la diferencia entre una funcionalidad obsoleta (deprecated) y una
removida?
5) ¿Para jQuery, qué diferencia hay entre las propiedades y los atributos de un
elemento?
6) ¿Para qué se utilizan los métodos attr(), prop() y val()? ¿Algún otro método
para modificar atributos?
7) ¿Qué diferencias existen entre los atributos y los datos en un elemento HTML?
8) ¿A qué se refiere la propagación de un evento ocurrido en un nodo del DOM?
9) ¿Qué diferencias y similitudes hay entre las propiedades async y defer? ¿Se
pueden usar ambos en un mismo elemento script?
10) ¿Cuáles son los distintos estados de carga de un documento Web?
11) ¿Los scripts dentro del documento Web retrasan el cambio de estado de carga del
documento de interactive a complete?
12) Se mencionó que las imágenes se cargan luego de que ocurre el evento
interactive del documento, entonces ¿es posible acceder a un nodo img
durante la carga?
13) ¿Qué es la tecnología CDN? ¿Cuál es su finalidad?
16. WEBGRAFÍA
jQuery - https://jquery.com/
W3Schools - https://www.w3schools.com
MDN Web docs - https://developer.mozilla.org
DevCode - https://devcode.la
Alligator.io - https://alligator.io
JavaScript,Info - https://javascript.info
UNIDAD N° 2. jQuery
Asignatura: Desarrollo de Aplicaciones I Página 45 de 46