# JQuery

jQuery es una biblioteca multiplataforma de JavaScript, creada inicialmente por John Resig, que permite simplificar la manera de interactuar con los documentos HTML, manipular el árbol DOM, manejar eventos, desarrollar animaciones y agregar interacción con la técnica AJAX a páginas web. Fue presentada el 14 de enero de 2006 en el BarCamp NYC. De acuerdo a un análisis de la Web (realizado en 2017) JQuery es la biblioteca de JavaScript más utilizada, por un amplio margen.
jQuery es software libre y de código abierto, posee un doble licenciamiento bajo la Licencia MIT y la Licencia Pública General de GNU v2, permitiendo su uso en proyectos libres y privados. jQuery, al igual que otras bibliotecas, ofrece una serie de funcionalidades basadas en JavaScript que de otra manera requerirían de mucho más código, es decir, con las funciones propias de esta biblioteca se logran grandes resultados en menos tiempo y espacio.
La sintaxis de JQuery está diseñada para facilitar la navegación por un documento, seleccionar elementos DOM, crear animaciones, manejar eventos y desarrollar aplicaciones AJAX. JQuery también proporciona capacidades para que los desarrolladores creen complementos en la parte superior de la biblioteca de JavaScript. Esto permite a los desarrolladores crear abstracciones para interacción y animación de bajo nivel, efectos avanzados y widgets temáticos de alto nivel. El enfoque modular de la biblioteca jQuery permite la creación de poderosas páginas web dinámicas y aplicaciones web.
El conjunto de características principales de jQuery (selecciones de elementos DOM, recorrido y manipulación) habilitados por su motor de selección (denominado "Sizzle" de v1.3), crearon un nuevo "estilo de programación", algoritmos de fusión y estructuras de datos DOM. Este estilo influyó en la arquitectura de otros marcos de JavaScript como YUI v3 y Dojo, lo que más tarde estimuló la creación de las API de selectores estándar.
Las empresas Microsoft y Nokia anunciaron en 2008 que iban a incluir la biblioteca en sus plataformas. Microsoft la añadiría en su IDE Visual Studio y la usaría junto con los frameworks ASP.NET AJAX y ASP.NET MVC, mientras que Nokia la integraría con su plataforma Web Run-Time.

## Visión general

jQuery, en su núcleo, es una biblioteca de manipulación de Modelo de Objetos del Documento (DOM). El DOM es una representación en estructura de árbol de todos los elementos de una página web. JQuery simplifica la sintaxis para buscar, seleccionar y manipular estos elementos DOM. Por ejemplo, JQuery se puede usar para encontrar un elemento en el documento con una determinada propiedad (por ejemplo, todos los elementos con una etiqueta h1), cambiar uno o más de sus atributos (por ejemplo, color, visibilidad) o hacer que responda a un evento (por ejemplo, un clic del ratón).
jQuery también proporciona un paradigma para el manejo de eventos que va más allá de la selección y manipulación básicas de elementos DOM. La asignación de eventos y la definición de la función de devolución de llamada de eventos se realizan en un solo paso en una única ubicación en el código. JQuery también pretende incorporar otra funcionalidad de JavaScript muy utilizada (por ejemplo, entradas y salidas de fundido cuando se ocultan elementos, animaciones mediante la manipulación de las propiedades de CSS).
Los principios de desarrollo con JQuery son:
* La separación de JavaScript y HTML: La biblioteca jQuery proporciona la sintaxis simple para añadir eventos manipuladores a la DOM utilizando JavaScript, en lugar de añadir eventos atributos HTML para llamar a funciones de JavaScript. Por lo tanto, alienta a los desarrolladores a separar completamente el código JavaScript del marcado HTML.
* Brevedad y claridad: JQuery promueve la brevedad y la claridad con funciones como funciones "chainable" y nombres de funciones abreviados.
* Eliminación de incompatibilidades entre navegadores: Los motores de JavaScript de diferentes navegadores difieren ligeramente, por lo que el código JavaScript que funciona para un navegador puede no funcionar para otro. Al igual que otros kits de herramientas de JavaScript, jQuery maneja todas estas inconsistencias en varios navegadores y proporciona una interfaz consistente que funciona en diferentes navegadores.
* Extensibilidad: Los nuevos eventos, elementos y métodos pueden agregarse fácilmente y luego reutilizarse como un complemento.

## Historia

JQuery fue creado originalmente en enero de 2006 en BarCamp NYC por John Resig, influenciado por la anterior biblioteca cssQuery de Dean Edwards. Actualmente lo mantiene un equipo de desarrolladores liderado por Timmy Willison (con el motor de selección de jQuery, Sizzle, liderado por Richard Gibson).
JQuery fue originalmente licenciada bajo el CC BY-SA 2.5 , y se le otorgó la licencia MIT en 2006. A fines de 2006, tenía doble licencia bajo las licencias GPL y MIT. Como esto llevó a cierta confusión, en 2012 se eliminó la GPL y ahora solo está autorizada bajo la licencia MIT.
En 2015, JQuery se utilizó en el 63% del millón de sitios web principales (según BuiltWith) y en el 17% de todos los sitios web de Internet. A partir de junio de 2018, JQuery se usa en el 73% del millón de sitios web más importantes y en el 22,4% de todos los sitios web (según BuiltWith).
Desde el año 2019, JQuery se usa en el 79,47% del millón de sitios web más importantes y en el 86% de todos los sitios web (según BuiltWith), siendo la biblioteca de JavaScript más popular hasta el momento.

## Características

jQuery incluye las siguientes características:
* Selección de elementos DOM utilizando el motor de selección de código abierto de múltiples navegadores Sizzle , un spin-off del proyecto jQuery.
* Interactividad y modificaciones del árbol DOM, incluyendo soporte para CSS 1-3 y un plugin básico de XPath.
* Eventos.
* Manipulación de la hoja de estilos CSS.
* Efectos y animaciones.
* Animaciones personalizadas.
* AJAX.
* Objetos diferidos y de promesa para controlar el procesamiento asíncrono
* Soporta extensiones (JSON).
* Utilidades varias como obtener información del navegador, operar con objetos y vectores, funciones para rutinas comunes, etc.
* Métodos de compatibilidad que están disponibles de forma nativa con los navegadores Mozilla Firefox 2.0+, Internet Explorer 6+, Safari 3+, Opera 10.6+ y Google Chrome 8+.
* Soporte para múltiples navegadores web.

### Soporte en navegadores web

jQuery 3.0+ admite las "versiones actuales-1" (es decir, la versión estable actual del navegador y la versión anterior) de Firefox (y ESR), Chrome, Safari y Edge, así como Internet Explorer 9 y versiones más recientes. En dispositivos móviles, es compatible con iOS 7 y más reciente y Android 4.0 y más reciente.

## Distribución

La biblioteca JQuery normalmente se distribuye como un único archivo JavaScript que define todas sus interfaces, incluidas las funciones DOM, Eventos y Ajax. Se puede incluir dentro de una página web al vincularlo a una copia local, o al vincularlo a una de las muchas copias disponibles en los servidores públicos. JQuery tiene una red de entrega de contenido (conocido popularmente como CDN) alojada por MaxCDN. Google en el servicio Google Hosted Libraries y Microsoft también alojan la biblioteca.
Ejemplo de vinculación de una copia de la biblioteca localmente (desde el mismo servidor que aloja la página web):
<script src="jquery.js"></script>
Ejemplo de vinculación de una copia de la biblioteca remotamente (a través del CDN propio de JQuery):
<script src="https://code.jquery.com/jquery-3.4.0.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>

## Uso

jQuery consiste en un único fichero JavaScript que contiene las funcionalidades comunes de DOM, eventos, efectos y AJAX.
La característica principal de la biblioteca es que permite cambiar el contenido de una página web sin necesidad de recargarla, mediante la manipulación del árbol DOM y peticiones AJAX. Para ello utiliza las funciones $ o jQuery.

### Función $

La forma de interactuar con la página es mediante la función $, un alias de jQuery, que recibe como parámetro una expresión CSS o el nombre de una etiqueta HTML y devuelve todos los nodos (elementos) que concuerden con la expresión. Esta expresión es denominada selector en la terminología de jQuery.
Una vez obtenidos los nodos, se les puede aplicar cualquiera de las funciones que facilita la biblioteca.
O por ejemplo, efectos gráficos:

### Inicio de jQuery

Comúnmente antes de realizar cualquier acción en el documento con jQuery, debemos percatarnos de que el documento esté listo. Para ello usamos $(document).ready;, de esta forma:

## Versiones

| Fecha de versión | Número de versión | Notas adicionales |
| 26 de agosto de 2006 | 1.0 | Primera versión estable |
| 31 de agosto de 2006 | 1.0.1 | |
| 9 de octubre de 2006 | 1.0.2 | |
| 27 de octubre de 2006 | 1.0.3 | |
| 12 de diciembre de 2006 | 1.0.4 | Último arreglo de la versión 1.0 |
| 14 de enero de 2007 | 1.1 | |
| 22 de enero de 2007 | 1.1.1 | |
| 27 de febrero de 2007 | 1.1.2 | |
| 1 de julio de 2007 | 1.1.3 | |
| 5 de julio de 2007 | 1.1.3.1 | |
| 24 de agosto de 2007 | 1.1.4 | Último arreglo de la versión 1.1 |
| 10 de septiembre de 2007 | 1.2 | |
| 16 de septiembre de 2007 | 1.2.1 | |
| 15 de enero de 2008 | 1.2.2 | |
| 8 de febrero de 2008 | 1.2.3 | |
| 19 de mayo de 2008 | 1.2.4 | |
| 21 de mayo de 2008 | 1.2.5 | Arreglo por mala construcción de 1.2.4 |
| 24 de mayo de 2008 | 1.2.6 | Último arreglo de la versión 1.2 |
| 14 de enero de 2009 | 1.3 | Se introduce el motor de selección de Sizzle en el núcleo |
| 21 de enero de 2009 | 1.3.1 | |
| 20 de febrero de 2009 | 1.3.2 | Último arreglo de la versión 1.3 |
| 14 de enero de 2010 | 1.4 | Crean una página web específica para jQuery 1.4 |
| 25 de enero de 2010 | 1.4.1 | |
| 19 de febrero de 2010 | 1.4.2 | |
| 16 de octubre de 2010 | 1.4.3 | |
| 11 de noviembre de 2010 | 1.4.4 | Último arreglo de la versión 1.4 |
| 31 de enero de 2011 | 1.5 | Reescritura del módulo AJAX |
| 24 de febrero de 2011 | 1.5.1 | |
| 31 de marzo de 2011 | 1.5.2 | Último arreglo de la versión 1.5 |
| 3 de mayo de 2011 | 1.6 | |
| 12 de mayo de 2011 | 1.6.1 | |
| 30 de junio de 2011 | 1.6.2 | |
| 1 de septiembre de 2011 | 1.6.3 | |
| 12 de septiembre de 2011 | 1.6.4 | |
| 3 de noviembre de 2011 | 1.7 | Añadidas las funciones .on y .off Mejor soporte de HTML5 para IE6/7/8 Soporte para AMD (Asynchronous Module Definition) |
| 21 de noviembre de 2011 | 1.7.1 | |
| 21 de marzo de 2012 | 1.7.2 | |
| 9 de agosto de 2012 | 1.8 | |
| 30 de agosto de 2012 | 1.8.1 | |
| 20 de septiembre de 2012 | 1.8.2 | |
| 13 de noviembre de 2012 | 1.8.3 | |
| 1 de enero de 2013 | 1.9 | Simplificación de la API Mejorado el soporte para CSS3 Soporte para Source map Solucionados varios bugs. |
| 30 de mayo de 2013 | 1.10.1 | Soluciona bug grave de la versión 1.9 |
| 24 de enero de 2014 | 1.11 | Velocidad de procesamiento aumentada Cambios a nivel de publicación de JQuery Modularidad definida por AMD Eliminados layouts forzados |
| 20 de mayo de 2016 | 1.12 | Cambios a nivel de publicación de jQuery Errores de la versión anterior corregidos. |
| 18 de abril de 2013 | 2.0 | Primer lanzamiento de las versiones 2.X Perdida de compatibilidad con Internet Explorer (6, 7 ,8) Reducción de tamaño en comparación con la versión 1.9.1 |
| 24 de enero de 2014 | 2.1 | Primera actualización de las versiones 2.X Menos diseños forzados Gastos generales de arranque más bajos Primera vez que se publica en NPM y Bower |
| 8 de enero de 2016 | 2.2 | Última actualización de las versiones 2.X Mejora de rendimiento Gastos generales de arranque más bajos Nuevas características |
| 9 de junio de 2016 | 3.0 | Primera actualización de las versiones 3.X Compatibilidad con jQuery UI y Jquery Mobile |
| 7 de julio de 2016 | 3.1.0 | Segunda actualización de las versiones 3.X Correcciones de bugs de la versión anterior |
| 22 de septiembre de 2016 | 3.1.1 | Correcciones de bugs de la versión anterior |
| 16 de marzo de 2017 | 3.2.0 | Tercera actualización de las versiones 3.X Soportes para propiedades CSS personalizadas Corrección en errores al ajustar tamaño vertical y horizontal |
| 20 de marzo de 2017 | 3.2.1 | Cambio en el núcleo Refuerzo para las dimensiones verticales y horizontales Cambios en los eventos |
| 19 de enero de 2018 | 3.3.0 | Cuarta actualización de las versiones 3.X Se eliminan varias funciones Se deja de utilizar PhantomJS para ejecutar pruebas |
| 20 de enero de 2018 | 3.3.1 | Cambio para adaptarse a la versión 5.X de NPM |
| 10 de abril de 2019 | 3.4.0 | Quinta actualización de las versiones 3.X Mejora de rendimiento en cambios de alto y ancho Cambio en el manejador de evento de los input de tipo radio Arreglo de vulnerabilidad Eliminación de los selectores de posición |
| 10 de abril de 2020 | 3.5.0 | |
| 2 de marzo de 2021 | 3.6.0 | |