diff --git a/.gitignore b/.gitignore index 496ee2c..9daa824 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -.DS_Store \ No newline at end of file +.DS_Store +node_modules diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..5ec9cc2 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: node index.js \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..778aab0 --- /dev/null +++ b/index.js @@ -0,0 +1,20 @@ +var Hapi = require('hapi'); + +var server = new Hapi.Server(~~process.env.PORT || 8000, '0.0.0.0'); + +server.route({ + method: 'GET', + path: '/{path*}', + handler: { + directory: { + path: './libro/html', + listing: false, + index: true + } + } +}); + +// Start the server +server.start(function () { + console.log('Server started at [' + server.info.uri + ']'); +}); \ No newline at end of file diff --git a/libro/epub/Fundamentos_de_jQuery.epub b/libro/epub/Fundamentos_de_jQuery.epub index 72f67ef..352c935 100644 Binary files a/libro/epub/Fundamentos_de_jQuery.epub and b/libro/epub/Fundamentos_de_jQuery.epub differ diff --git a/libro/html/index.html b/libro/html/index.html index c5f7a85..50bcf8f 100644 --- a/libro/html/index.html +++ b/libro/html/index.html @@ -287,16 +287,16 @@
jQuery se está convirtiendo rápidamente en una herramienta que todo desarrollador de interfaces web debería de conocer. El propósito de este libro es proveer un resumen de la biblioteca, de tal forma que para cuando lo haya terminado de leer, será capaz de realizar tareas básicas utilizando jQuery y tendrá una sólida base para continuar el aprendizaje. El libro fue diseñado para ser utilizado como material en un salón de clases, pero también puede ser útil para estudiarlo de forma individual.
La modalidad de trabajo es la siguiente: En primer lugar se dedicará tiempo a comprender un concepto para luego realizar un ejercicio relacionado. Algunos de los ejercicios pueden llegar a ser triviales, mientras que otros no tanto. El objetivo es aprender a resolver de manera fácil lo que normalmente se resolvería con jQuery. Las soluciones a todos los ejercicios están incluidas en el mismo material de aprendizaje.
El material de aprendizaje y el código fuente de los ejemplos que se utilizan en el libro están hospedados en un repositorio de Github. Desde allí es posible descargar un archivo .zip o .tar con el código para utilizar en un servidor web.
Si usted suele utilizar Git, es bienvenido de clonar o modificar el repositorio.
Para trabajar con los contenidos del libro, necesitará las siguientes herramientas:
Existen dos formas de insertar código JavaScript dentro de una página: escribiendo código en la misma (en ingles inline) o a través de un archivo externo utilizando la etiqueta script. El orden en el cual se incluye el código es importante: un código que depende de otro debe ser incluido después del que referencia (Ejemplo: Si la función B depende de A, el orden debe ser A,B y no B,A).
Para mejorar el rendimiento de la página, el código JavaScript debe ser incluido al final del HTML. Además, cuando se trabaja en un ambiente de producción con múltiples archivos JavaScript, éstos deben ser combinados en un solo archivo.
Ejemplo de código JavaScript en línea
@@ -317,7 +317,7 @@<script src='/js/jquery.js'></script>
La utilización de una herramienta de depuración es esencial para trabajar con JavaScript. Firefox provee un depurador a través de la extensión Firebug; mientras que Safari y Chrome ya traen uno integrado.
Cada depurador ofrece:
La mayoría de los capítulos concluyen con uno o más ejercicios. En algunos, podrá trabajar directamente con Firebug; en otros deberá escribir código JavaScript luego de incluir la biblioteca jQuery en el documento.
Aún así, para completar ciertos ejercicios, necesitará consultar la documentación oficial de jQuery. Aprender a encontrar respuestas, es una parte importante del proceso de aprendizaje.
Estas son algunas sugerencias para hacer frente a los problemas:
@@ -348,7 +348,7 @@Podrá encontrar en la carpeta /ejercicios/soluciones
ejemplos de soluciones a los ejercicios del libro.
Existen una serie de convenciones utilizadas en el libro:
Los métodos que pueden ser llamados desde el objeto jQuery, serán referenciados como $.fn.nombreDelMetodo
. Los métodos que existen en el espacio de nombres (en inglés namespace) de jQuery pero que no pueden ser llamados desde el objeto jQuery serán referenciados como $.nombreDelMetodo
. Si esto no significa mucho para usted, no se preocupe — será más claro a medida que vaya progresando en el libro.
Ejemplo de un código
@@ -360,7 +360,7 @@Debido a que el material tiene como fin el aprendizaje y la enseñanza, el mismo se encuentra traducido a español formal (usted).
Muchos conceptos técnicos son nombrados en su versión traducida a español. Sin embargo, para tener de referencia, también se explica como es llamado en inglés.
Existe una gran cantidad de artículos que se ocupan de algún aspecto de jQuery. Algunos son excelentes pero otros, francamente, son erróneos. Cuando lea un artículo sobre jQuery, este seguro que se está abarcando la misma versión de la biblioteca que está utilizando, y resístase a la tentación de copiar y pegar el código — tómese un tiempo para poder entenderlo.
A continuación se listan una serie de excelentes recursos para utilizar durante el aprendizaje. El más importante de todos es el código fuente de jQuery, el cual contiene (en su formato sin comprimir) una completa documentación a través de comentarios. La biblioteca no es una caja negra — el entendimiento de ella irá incrementándose exponencialmente si la revisa de vez en cuando — y es muy recomendable que la guarde en los favoritos de su navegador para tenerla como guía de referencia.
jQuery se encuentra escrito en JavaScript, un lenguaje de programación muy rico y expresivo.
El capítulo está orientado a personas sin experiencia en el lenguaje, abarcando conceptos básicos y problemas frecuentes que pueden presentarse al trabajar con el mismo. Por otro lado, la sección puede ser beneficiosa para quienes utilicen otros lenguajes de programación para entender las peculiaridades de JavaScript.
Si usted esta interesado en aprender el lenguaje más en profundidad, puede leer el libro JavaScript: The Good Parts escrito por Douglas Crockford.
Comprensión de declaraciones, nombres de variables, espacios en blanco, y otras sintaxis básicas de JavaScript.
Declaración simple de variable
var foo = 'hola mundo';
@@ -404,9 +404,9 @@ Los operadores básicos permiten manipular valores.
Concatenación
var foo = 'hola';
@@ -423,7 +423,7 @@ 2.3.1var k = i++; // incrementación posterior: k es igual a 2; i es igual a 3
En JavaScript, las operaciones con números y cadenas de caracteres (en inglés strings) pueden ocasionar resultados no esperados.
Suma vs. concatenación
var foo = 1;
@@ -441,7 +441,7 @@ console.log(foo + +bar);
Los operadores lógicos permiten evaluar una serie de operandos utilizando operaciones AND y OR.
Operadores lógicos AND y OR
var foo = 1;
@@ -470,7 +470,7 @@ 2.3.3Este estilo de declaración es muy elegante y conciso; pero puede ser difícil para leer (sobretodo para principiantes). Por eso se explícita, para reconocerlo cuando este leyendo código. Sin embargo su utilización no es recomendable a menos que esté cómodo con el concepto y su comportamiento.
Los operadores de comparación permiten comprobar si determinados valores son equivalentes o idénticos.
Operadores de Comparación
var foo = 1;
@@ -492,7 +492,7 @@ 2.
A veces se desea ejecutar un bloque de código bajo ciertas condiciones. Las estructuras de control de flujo — a través de la utilización de las declaraciones if
y else
permiten hacerlo.
Control del flujo
var foo = true;
@@ -518,7 +518,7 @@ 2.4
Debe tener en cuenta de no definir funciones con el mismo nombre múltiples veces dentro de declaraciones if
/else
, ya que puede obtener resultados no esperados.
- 2.4.1 Elementos Verdaderos y Falsos
+ 2.4.1 Elementos Verdaderos y Falsos
Para controlar el flujo adecuadamente, es importante entender qué tipos de valores son “verdaderos” y cuales “falsos”. A veces, algunos valores pueden parecer una cosa pero al final terminan siendo otra.
Valores que devuelven verdadero (true)
'0';
@@ -534,7 +534,7 @@ undefined; // tenga cuidado -- indefinido (undefined) puede ser redefinido
- 2.4.2 Variables Condicionales Utilizando el Operador Ternario
+ 2.4.2 Variables Condicionales Utilizando el Operador Ternario
A veces se desea establecer el valor de una variable dependiendo de cierta condición. Para hacerlo se puede utilizar una declaración if
/else
, sin embargo en muchos casos es más conveniente utilizar el operador ternario. [Definición: El operador ternario evalúa una condición; si la condición es verdadera, devuelve cierto valor, caso contrario devuelve un valor diferente.]
El operador ternario
// establecer a foo igual a 1 si bar es verdadero;
@@ -543,7 +543,7 @@ El operador ternario puede ser utilizado sin devolver un valor a la variable, sin embargo este uso generalmente es desaprobado.
- 2.4.3 Declaración Switch
+ 2.4.3 Declaración Switch
En lugar de utilizar una serie de declaraciones if/else/else if/else, a veces puede ser útil la utilización de la declaración switch
. [Definición: La declaración Switch
evalúa el valor de una variable o expresión, y ejecuta diferentes bloques de código dependiendo de ese valor.]
Una declaración Switch
switch (foo) {
@@ -585,16 +585,16 @@ 2.4.3
- 2.5 Bucles
+ 2.5 Bucles
Los bucles (en inglés loops) permiten ejecutar un bloque de código un determinado número de veces.
Bucles
// muestra en la consola 'intento 0', 'intento 1', ..., 'intento 4'
for (var i=0; i<5; i++) {
console.log('intento ' + i);
}
- *Note que en el ejemplo se utiliza la palabra var antes de la variable i
, esto hace que dicha variable quede dentro del “alcance” (en inglés scope) del bucle. Más adelante en este capítulo se examinará en profundidad el concepto de alcance.*
+ Note que en el ejemplo se utiliza la palabra var antes de la variable i
, esto hace que dicha variable quede dentro del “alcance” (en inglés scope) del bucle. Más adelante en este capítulo se examinará en profundidad el concepto de alcance.
- 2.5.1 Bucles Utilizando For
+ 2.5.1 Bucles Utilizando For
Un bucle utilizando for
se compone de cuatro estados y posee la siguiente estructura:
for ([expresiónInicial]; [condición]; [incrementoDeLaExpresión])
[cuerpo]
@@ -611,7 +611,7 @@ 2.5.1
}
- 2.5.2 Bucles Utilizando While
+ 2.5.2 Bucles Utilizando While
Un bucle utilizando while
es similar a una declaración condicional if
, excepto que el cuerpo va a continuar ejecutándose hasta que la condición a evaluar sea falsa.
while ([condición]) [cuerpo]
Un típico bucle utilizando while
@@ -631,7 +631,7 @@ 2.5.2
Se comienza en -1
y luego se utiliza la incrementación previa (++i
).
- 2.5.3 Bucles Utilizando Do-while
+ 2.5.3 Bucles Utilizando Do-while
Este bucle es exactamente igual que el bucle utilizando while
excepto que el cuerpo es ejecutado al menos una vez antes que la condición sea evaluada.
do [cuerpo] while ([condición])
Un bucle utilizando do-while
@@ -646,7 +646,7 @@ 2.
Este tipo de bucles son bastantes atípicos ya que en pocas ocasiones se necesita un bucle que se ejecute al menos una vez. De cualquier forma debe estar al tanto de ellos.
- 2.5.4 Break y Continue
+ 2.5.4 Break y Continue
Usualmente, el fin de la ejecución de un bucle resultará cuando la condición no siga evaluando un valor verdadero, sin embargo también es posible parar un bucle utilizando la declaración break
dentro del cuerpo.
Detener un bucle con break
for (var i = 0; i < 10; i++) {
@@ -670,7 +670,7 @@ 2.5.4
- 2.6 Palabras Reservadas
+ 2.6 Palabras Reservadas
JavaScript posee un número de “palabras reservadas”, o palabras que son especiales dentro del mismo lenguaje. Debe utilizar estas palabras cuando las necesite para su uso específico.
abstract
@@ -732,7 +732,7 @@ 2.6
- 2.7 Vectores
+ 2.7 Vectores
Los vectores (en español también llamados matrices o arreglos y en inglés arrays) son listas de valores con índice-cero (en inglés zero-index), es decir, que el primer elemento del vector está en el índice 0. Éstos son una forma práctica de almacenar un conjunto de datos relacionados (como cadenas de caracteres), aunque en realidad, un vector puede incluir múltiples tipos de datos, incluso otros vectores.
Un vector simple
var myArray = [ 'hola', 'mundo' ];
@@ -755,7 +755,7 @@ 2.7 Vectores<
var mySplit = myString.split(''); // [ 'h', 'o', 'l', 'a' ]
- 2.8 Objetos
+ 2.8 Objetos
Los objetos son elementos que pueden contener cero o más conjuntos de pares de nombres claves y valores asociados a dicho objeto. Los nombres claves pueden ser cualquier palabra o número válido. El valor puede ser cualquier tipo de valor: un número, una cadena, un vector, una función, incluso otro objeto.
[Definición: Cuando uno de los valores de un objeto es una función, ésta es nombrada como un método del objeto.] De lo contrario, se los llama propiedades.
Curiosamente, en JavaScript, casi todo es un objeto — vectores, funciones, números, incluso cadenas — y todos poseen propiedades y métodos.
@@ -785,7 +785,7 @@ 2.8 ObjetosLos objetos literales pueden ser muy útiles para la organización del código, para más información puede leer el artículo (en inglés) Using Objects to Organize Your Code por Rebecca Murphey.
- 2.9 Funciones
+ 2.9 Funciones
Las funciones contienen bloques de código que se ejecutaran repetidamente. A las mismas se le pueden pasar argumentos, y opcionalmente la función puede devolver un valor.
Las funciones pueden ser creadas de varias formas:
Declaración de una función
@@ -794,7 +794,7 @@ 2.9 Funcione
var foo = function() { /* hacer algo */ }
Es preferible el método de función nombrada debido a algunas profundas razones técnicas. Igualmente, es probable encontrar a los dos métodos cuando se revise código JavaScript.
- 2.9.1 Utilización de Funciones
+ 2.9.1 Utilización de Funciones
Una función simple
var greet = function(person, greeting) {
var text = greeting + ', ' + person;
@@ -822,7 +822,7 @@ 2.9
greeting(); // se muestra en la consola 'Hola, Rebecca'
- 2.9.2 Funciones Anónimas Autoejecutables
+ 2.9.2 Funciones Anónimas Autoejecutables
Un patrón común en JavaScript son las funciones anónimas autoejecutables. Este patrón consiste en crear una expresión de función e inmediatamente ejecutarla. El mismo es muy útil para casos en que no se desea intervenir espacios de nombres globales, debido a que ninguna variable declarada dentro de la función es visible desde afuera.
Función anónima autoejecutable
(function(){
@@ -833,7 +833,7 @@ console.log(foo); // indefinido (undefined)
- 2.9.3 Funciones como Argumentos
+ 2.9.3 Funciones como Argumentos
En JavaScript, las funciones son “ciudadanos de primera clase” — pueden ser asignadas a variables o pasadas a otras funciones como argumentos. En jQuery, pasar funciones como argumentos es una práctica muy común.
Pasar una función anónima como un argumento
var myFn = function(fn) {
@@ -856,7 +856,7 @@ 2.9
- 2.10 Determinación del Tipo de Variable
+ 2.10 Determinación del Tipo de Variable
JavaScript ofrece una manera de poder comprobar el “tipo” (en inglés type) de una variable. Sin embargo, el resultado puede ser confuso — por ejemplo, el tipo de un vector es “object”.
Por eso, es una práctica común utilizar el operador typeof
cuando se trata de determinar el tipo de un valor específico.
Determinar el tipo en diferentes variables
@@ -896,7 +896,7 @@
- 2.11 La palabra clave this
+ 2.11 La palabra clave this
En JavaScript, así como en la mayoría de los lenguajes de programación orientados a objetos, this
es una palabra clave especial que hace referencia al objeto en donde el método está siendo invocado. El valor de this
es determinado utilizando una serie de simples pasos:
- Si la función es invocada utilizando Function.call o Function.apply,
this
tendrá el valor del primer argumento pasado al método. Si el argumento es nulo (null) o indefinido (undefined), this
hará referencia el objeto global (el objeto window
);
@@ -988,7 +988,7 @@ 2.11obj.sayHello(); // registra 'Hola, mi nombre es Rebecca'
- 2.12 Alcance
+ 2.12 Alcance
El “alcance” (en inglés scope) se refiere a las variables que están disponibles en un bloque de código en un tiempo determinado. La falta de comprensión de este concepto puede llevar a una frustrante experiencia de depuración.
Cuando una variable es declarada dentro de una función utilizando la palabra clave var
, ésta únicamente esta disponible para el código dentro de la función — todo el código fuera de dicha función no puede acceder a la variable. Por otro lado, las funciones definidas dentro de la función podrán acceder a la variable declarada.
Las variables que son declaradas dentro de la función sin la palabra clave var
no quedan dentro del ámbito de la misma función — JavaScript buscará el lugar en donde la variable fue previamente declarada, y en caso de no haber sido declarada, es definida dentro del alcance global, lo cual puede ocasionar consecuencias inesperadas;
@@ -1055,7 +1055,7 @@ 2.12 Alcance
// por lo cual se mostrará un error
- 2.13 Clausuras
+ 2.13 Clausuras
Las clausuras (en inglés closures) son una extensión del concepto de alcance (scope) — funciones que tienen acceso a las variables que están disponibles dentro del ámbito en donde se creó la función. Si este concepto es confuso, no debe preocuparse: se entiende mejor a través de ejemplos.
En el ejemplo 2.47 se muestra la forma en que funciones tienen acceso para cambiar el valor de las variables. El mismo comportamiento sucede en funciones creadas dentro de bucles — la función “observa” el cambio en la variable, incluso después de que la función sea definida, resultando que en todos los clicks aparezca una ventana de alerta mostrando el valor 5.
¿Cómo establecer el valor de i
?
@@ -1105,9 +1105,9 @@ 2.13 Clausur
No es posible interactuar de forma segura con el contenido de una página hasta que el documento no se encuentre preparado para su manipulación. jQuery permite detectar dicho estado a través de la declaración $(document).ready()
de forma tal que el bloque se ejecutará sólo una vez que la página este disponible.
El bloque $(document).ready()
$(document).ready(function() {
@@ -1128,8 +1128,8 @@ 3.1 $(d
$(document).ready(readyFn);
El concepto más básico de jQuery es el de “seleccionar algunos elementos y realizar acciones con ellos”. La biblioteca soporta gran parte de los selectores CSS3 y varios más no estandarizados. En http://api.jquery.com/category/selectors/ se puede encontrar una completa referencia sobre los selectores de la biblioteca.
+El concepto más básico de jQuery es el de “seleccionar algunos elementos y realizar acciones con ellos”. La biblioteca soporta gran parte de los selectores CSS3 y varios más no estandarizados. En http://api.jquery.com/category/selectors/ se puede encontrar una completa referencia sobre los selectores de la biblioteca.
A continuación se muestran algunas técnicas comunes para la selección de elementos:
Selección de elementos en base a su ID
$('#myId'); // notar que los IDs deben ser únicos por página
@@ -1191,7 +1191,7 @@ Estos tipos de selectores pueden resultar útiles pero también ser muy lentos. Cuando sea posible, es recomendable realizar la selección utilizando IDs, nombres de clases y nombres de etiquetas.
Si desea conocer más sobre este asunto, Paul Irish realizó una gran presentación sobre mejoras de rendimiento en JavaScript (en ingles), la cual posee varias diapositivas centradas en selectores.
Una vez realizada la selección de los elementos, querrá conocer si dicha selección entregó algún resultado. Para ello, pueda que escriba algo así:
if ($('div.foo')) { ... }
Sin embargo esta forma no funcionará. Cuando se realiza una selección utilizando $()
, siempre es devuelto un objeto, y si se lo evalúa, éste siempre devolverá true
. Incluso si la selección no contiene ningún elemento, el código dentro del bloque if
se ejecutará.
if ($('div.foo').length) { ... }
Cada vez que se hace una selección, una gran cantidad de código es ejecutado. jQuery no guarda el resultado por si solo, por lo tanto, si va a realizar una selección que luego se hará de nuevo, deberá salvar la selección en una variable.
Guardar selecciones en una variable
var $divs = $('div');
@@ -1215,7 +1215,7 @@ A veces, puede obtener una selección que contiene más de lo que necesita; en este caso, es necesario refinar dicha selección. jQuery ofrece varios métodos para poder obtener exactamente lo que desea.
Refinamiento de selecciones
$('div.foo').has('p'); // el elemento div.foo contiene elementos <p>
@@ -1226,50 +1226,50 @@ $('ul li').eq(5); // el sexto item de una lista desordenada
jQuery ofrece varios pseudo-selectores que ayudan a encontrar elementos dentro de los formularios, éstos son especialmente útiles ya que dependiendo de los estados de cada elemento o su tipo, puede ser difícil distinguirlos utilizando selectores CSS estándar.
Selecciona elementos <button>
y con el atributo type='button'
<button>
y con el atributo type='button'
Selecciona elementos <input>
con el atributo type='checkbox'
<input>
con el atributo type='checkbox'
Selecciona elementos <input>
del tipo checkbox
seleccionados
<input>
del tipo checkbox
seleccionados
Selecciona elementos del formulario que están deshabitados
+Selecciona elementos del formulario que están habilitados
+Selecciona elementos <input>
con el atributo type='file'
<input>
con el atributo type='file'
Selecciona elementos <input>
con el atributo type='image'
<input>
con el atributo type='image'
Selecciona elementos <input>
, <textarea>
y <select>
<input>
, <textarea>
y <select>
Selecciona elementos <input>
con el atributo type='password'
<input>
con el atributo type='password'
Selecciona elementos <input>
con el atributo type='radio'
<input>
con el atributo type='radio'
Selecciona elementos <input>
con el atributo type='reset'
<input>
con el atributo type='reset'
Selecciona elementos <options>
que están seleccionados
<options>
que están seleccionados
Selecciona elementos <input>
con el atributo type='submit'
<input>
con el atributo type='submit'
Selecciona elementos <input>
con el atributo type='text'
<input>
con el atributo type='text'
Utilizando pseudo-selectores en elementos de formularios
@@ -1278,10 +1278,10 @@Una vez realizada la selección de los elementos, es posible utilizarlos en conjunto con diferentes métodos. éstos, generalmente, son de dos tipos: obtenedores (en inglés getters) y establecedores (en inglés setters). Los métodos obtenedores devuelven una propiedad del elemento seleccionado; mientras que los métodos establecedores fijan una propiedad a todos los elementos seleccionados.
Si en una selección se realiza una llamada a un método, y éste devuelve un objeto jQuery, es posible seguir un “encadenado” de métodos en el objeto.
Encadenamiento
$('#content').find('h3').eq(2).html('nuevo texto para el tercer elemento h3');
@@ -1306,7 +1306,7 @@ jQuery “sobrecarga” sus métodos, en otras palabras, el método para establecer un valor posee el mismo nombre que el método para obtener un valor. Cuando un método es utilizado para establecer un valor, es llamado método establecedor (en inglés setter). En cambio, cuando un método es utilizado para obtener (o leer) un valor, es llamado obtenedor (en inglés getter).
El método $.fn.html
utilizado como establecedor
$('h1').html('hello world');
@@ -1316,7 +1316,7 @@ jQuery incluye una manera útil de obtener y establecer propiedades CSS a los elementos.
Nota
@@ -1339,7 +1339,7 @@3.4 'paddingTop' : '+=20px' // suma 20px al padding superior original del elemento });
-3.4.1 Utilizar Clases para Aplicar Estilos CSS
+3.4.1 Utilizar Clases para Aplicar Estilos CSS
Para obtener valores de los estilos aplicados a un elemento, el método
$.fn.css
es muy útil, sin embargo, su utilización como método establecedor se debe evitar (ya que, para aplicar estilos a un elemento, se puede hacer directamente desde CSS). En su lugar, lo ideal, es escribir reglas CSS que se apliquen a clases que describan los diferentes estados visuales de los elementos y luego cambiar la clase del elemento para aplicar el estilo que se desea mostrar.Trabajar con clases
var $h1 = $('h1'); @@ -1352,9 +1352,9 @@
-
3.4.2 Dimensiones
+3.4.2 Dimensiones
jQuery ofrece una variedad de métodos para obtener y modificar valores de dimensiones y posición de un elemento.
-El código mostrado en el ejemplo “Métodos básicos sobre Dimensiones” es solo un breve resumen de las funcionalidades relaciones a dimensiones en jQuery; para un completo detalle puede consultar http://api.jquery.com/category/dimensions/.
+El código mostrado en el ejemplo “Métodos básicos sobre Dimensiones” es solo un breve resumen de las funcionalidades relaciones a dimensiones en jQuery; para un completo detalle puede consultar http://api.jquery.com/category/dimensions/.
Métodos básicos sobre Dimensiones
$('h1').width('50px'); // establece el ancho de todos los elementos H1 $('h1').width(); // obtiene el ancho del primer elemento H1 @@ -1369,7 +1369,7 @@
3.4.2 Dime
Los atributos de los elementos HTML que conforman una aplicación pueden contener información útil, por eso es importante poder establecer y obtener esa información.
El método $.fn.attr
actúa tanto como método establecedor como obtenedor. Además, al igual que el método $.fn.css
, cuando se lo utiliza como método establecedor, puede aceptar un conjunto de palabra clave-valor o un objeto conteniendo más conjuntos.
Establecer atributos
@@ -1384,9 +1384,9 @@Una vez obtenida la selección, es posible encontrar otros elementos utilizando a la misma selección.
-En http://api.jquery.com/category/traversing/ puede encontrar una completa documentación sobre los métodos de recorrido de DOM (en inglés traversing) que posee jQuery.
+En http://api.jquery.com/category/traversing/ puede encontrar una completa documentación sobre los métodos de recorrido de DOM (en inglés traversing) que posee jQuery.
Nota
Debe ser cuidadoso en recorrer largas distancias en un documento — recorridos complejos obligan que la estructura del documento sea siempre la misma, algo que es difícil de garantizar. Uno -o dos- pasos para el recorrido esta bien, pero generalmente hay que evitar atravesar desde un contenedor a otro.
@@ -1413,11 +1413,11 @@3.6 Re });
Una vez realizada la selección de los elementos que desea utilizar, “la diversión comienza”. Es posible cambiar, mover, remover y duplicar elementos. También crear nuevos a través de una sintaxis simple.
-La documentación completa sobre los métodos de manipulación puede encontrarla en la sección Manipulation
: http://api.jquery.com/category/manipulation/.
La documentación completa sobre los métodos de manipulación puede encontrarla en la sección Manipulation
: http://api.jquery.com/category/manipulation/.
Existen muchas formas por las cuales de puede modificar un elemento. Entre las tareas más comunes están las de cambiar el HTML interno o algún atributo del mismo. Para este tipo de tareas, jQuery ofrece métodos simples, funcionales en todos los navegadores modernos. Incluso es posible obtener información sobre los elementos utilizando los mismos métodos pero en su forma de método obtenedor.
Nota
@@ -1429,25 +1429,25 @@html('Nuevo <strong>primer</strong> párrafo');
Existen varias maneras para mover elementos a través del DOM; las cuales se pueden separar en dos enfoques:
querer colocar el/los elementos seleccionados de forma relativa a otro elemento;
Cuando se utiliza un método como $.fn.appendTo
, lo que se está haciendo es mover al elemento; pero a veces en lugar de eso, se necesita mover un duplicado del mismo elemento. En este caso, es posible utilizar el método $.fn.clone
.
Obtener una copia del elemento
// copiar el primer elemento de la lista y moverlo al final de la misma
@@ -1485,7 +1485,7 @@ 3.7.2.1
Existen dos formas de remover elementos de una página: Utilizando $.fn.remove
o $.fn.detach
. Cuando desee remover de forma permanente al elemento, utilize el método $.fn.remove
. Por otro lado, el método $.fn.detach también remueve el elemento, pero mantiene la información y eventos asociados al mismo, siendo útil en el caso que necesite reinsertar el elemento en el documento.
Nota
@@ -1495,7 +1495,7 @@3.7.2.2
jQuery provee una forma fácil y elegante para crear nuevos elementos a través del mismo método $()
que se utiliza para realizar selecciones.
Crear nuevos elementos
$('<p>Un nuevo párrafo</p>');
@@ -1532,7 +1532,7 @@ 3.7.3<
$myList.append(myItems.join(''));
Las capacidades para la manipulación de atributos que ofrece la biblioteca son extensos. La realización de cambios básicos son simples, sin embargo el método $.fn.attr
permite manipulaciones más complejas.
Manipular un simple atributo
$('#myDiv a:first').attr('href', 'newDestination.html');
@@ -1555,9 +1555,9 @@ Abra el archivo /ejercicios/index.html
en el navegador. Realice el ejercicio utilizando el archivo /ejercicios/js/sandbox.js
o trabaje directamente con Firebug para cumplir los siguientes puntos:
Seleccionar todos los elementos div
que poseen la clase “module”.
Abra el archivo /ejercicios/index.html
en el navegador. Realice el ejercicio utilizando el archivo /ejercicios/js/sandbox.js
o trabaje directamente con Firebug para cumplir los siguientes puntos:
Seleccionar todas las imágenes en la página; registrar en la consola el atributo alt
de cada imagen.
Abra el archivo /ejercicios/index.html
en el navegador. Realice el ejercicio utilizando el archivo /ejercicios/js/sandbox.js
o trabaje directamente con Firebug para cumplir los siguientes puntos:
$
vs $()
$
vs $()
Hasta ahora, se ha tratado completamente con métodos que se llaman desde el objeto jQuery. Por ejemplo:
$('h1').remove();
Dichos métodos son parte del espacio de nombres (en inglés namespace) $.fn
, o del prototipo (en inglés prototype) de jQuery, y son considerados como métodos del objeto jQuery.
$
Existen algunos casos en donde métodos del objeto y del núcleo poseen los mismos nombres, como sucede con $.each
y $.fn.each
. En estos casos, debe ser cuidadoso de leer bien la documentación para saber que objeto utilizar correctamente.
jQuery ofrece varios métodos utilitarios dentro del espacio de nombres $
. Estos métodos son de gran ayuda para llevar a cabo tareas rutinarias de programación. A continuación se muestran algunos ejemplos, para una completa documentación sobre ellos, visite http://api.jquery.com/category/utilities/.
jQuery ofrece varios métodos utilitarios dentro del espacio de nombres $
. Estos métodos son de gran ayuda para llevar a cabo tareas rutinarias de programación. A continuación se muestran algunos ejemplos, para una completa documentación sobre ellos, visite http://api.jquery.com/category/utilities/.
Como se mencionó en el capítulo “Conceptos Básicos de JavaScript”, jQuery ofrece varios métodos útiles para determinar el tipo de un valor específico.
Comprobar el tipo de un determinado valor
var myValue = [1, 2, 3];
@@ -1708,7 +1708,7 @@ 4.3jQuery.isNumeric(16); // verdadero (true). No disponible en versiones inferiores a jQuery 1.7
A menudo encontrará que existe información acerca de un elemento que necesita guardar. En JavaScript es posible hacerlo añadiendo propiedades al DOM del elemento, pero esta práctica conlleva enfrentarse a pérdidas de memoria (en inglés memory leaks) en algunos navegadores. jQuery ofrece una manera sencilla para poder guardar información relacionada a un elemento, y la misma biblioteca se ocupa de manejar los problemas que pueden surgir por falta de memoria.
Guardar y recuperar información relacionada a un elemento
$('#myDiv').data('keyName', { foo : 'bar' });
@@ -1744,18 +1744,18 @@ 4.4 El
Nota
- Para más información sobre el atributo HTML5 data-*
visite http://www.w3.org/TR/html5/global-attributes.html#embedding-custom-non-visible-data-with-the-data-attributes.
+ Para más información sobre el atributo HTML5 data-*
visite http://www.w3.org/TR/html5/global-attributes.html#embedding-custom-non-visible-data-with-the-data-attributes.
Si esta utilizando jQuery en conjunto con otras bibliotecas JavaScript, las cuales también utilizan la variable $
, pueden llegar a ocurrir una serie de errores. Para poder solucionarlos, es necesario poner a jQuery en su modo “no-conflicto”. Esto se debe realizar inmediatamente después que jQuery se cargue en la página y antes del código que se va a ejecutar.
Cuando se pone a jQuery en modo “no-conflicto”, la biblioteca ofrece la opción de asignar un nombre para reemplazar a la variable $
.
Poner a jQuery en modo no-conflicto
@@ -1779,15 +1779,15 @@jQuery provee métodos para asociar controladores de eventos (en inglés event handlers) a selectores. Cuando un evento ocurre, la función provista es ejecutada. Dentro de la función, la palabra clave this
hace referencia al elemento en que el evento ocurre.
Para más detalles sobre los eventos en jQuery, puede consultar http://api.jquery.com/category/events/.
-La función del controlador de eventos puede recibir un objeto. Este objeto puede ser utilizado para determinar la naturaleza del evento o, por ejemplo, prevenir el comportamiento predeterminado de éste. Para más detalles sobre el objeto del evento, visite http://api.jquery.com/category/events/event-object/.
+Para más detalles sobre los eventos en jQuery, puede consultar http://api.jquery.com/category/events/.
+La función del controlador de eventos puede recibir un objeto. Este objeto puede ser utilizado para determinar la naturaleza del evento o, por ejemplo, prevenir el comportamiento predeterminado de éste. Para más detalles sobre el objeto del evento, visite http://api.jquery.com/category/events/event-object/.
jQuery ofrece métodos para la mayoría de los eventos — entre ellos $.fn.click
, $.fn.focus
, $.fn.blur
, $.fn.change
, etc. Estos últimos son formas reducidas del método $.fn.on
de jQuery ($.fn.bind
en versiones anteriores a jQuery 1.7). El método $.fn.on
es útil para vincular (en inglés binding) la misma función de controlador a múltiples eventos, para cuando se desea proveer información al controlador de evento, cuando se está trabajando con eventos personalizados o cuando se desea pasar un objeto a múltiples eventos y controladores.
Vincular un evento utilizando un método reducido
$('p').click(function() {
@@ -1808,7 +1808,7 @@
}
);
A veces puede necesitar que un controlador particular se ejecute solo una vez — y después de eso, necesite que ninguno más se ejecute, o que se ejecute otro diferente. Para este propósito jQuery provee el método $.fn.one
.
Cambiar controladores utilizando el método $.fn.one
$('p').one('click', function() {
@@ -1818,7 +1818,7 @@
- 5.2.2 Desvincular Eventos
+ 5.2.2 Desvincular Eventos
Para desvincular (en ingles unbind) un controlador de evento, puede utilizar el método $.fn.off
pasándole el tipo de evento a desconectar. Si se pasó como adjunto al evento una función nombrada, es posible aislar la desconexión de dicha función pasándola como segundo argumento.
Desvincular todos los controladores del evento click en una selección
$('p').off('click');
@@ -1830,7 +1830,7 @@ 5.2.2$('p').off('click', bar); // foo esta atado aún al evento click
Cuando se esta desarrollando aplicaciones complejas o extensiones de jQuery, puede ser útil utilizar espacios de nombres para los eventos, y de esta forma evitar que se desvinculen eventos cuando no lo desea.
Asignar espacios de nombres a eventos
$('p').on('click.myNamespace', function() { /* ... */ });
@@ -1839,7 +1839,7 @@ // el espacio de nombre 'myNamespace'
Muy a menudo, elementos en una aplicación estarán vinculados a múltiples eventos, cada uno con una función diferente. En estos casos, es posible pasar un objeto dentro de $.fn.on
con uno o más pares de nombres claves/valores. Cada clave será el nombre del evento mientras que cada valor será la función a ejecutar cuando ocurra el evento.
Vincular múltiples eventos a un elemento
$('p').on({
@@ -1853,29 +1853,29 @@
- 5.3 El Objeto del Evento
+ 5.3 El Objeto del Evento
Como se menciona en la introducción, la función controladora de eventos recibe un objeto del evento, el cual contiene varios métodos y propiedades. El objeto es comúnmente utilizado para prevenir la acción predeterminada del evento a través del método preventDefault. Sin embargo, también contiene varias propiedades y métodos útiles:
- pageX, pageY
- La posición del puntero del ratón en el momento que el evento ocurrió, relativo a las zonas superiores e izquierda de la página.
+ - La posición del puntero del ratón en el momento que el evento ocurrió, relativo a las zonas superiores e izquierda de la página.
- type
- El tipo de evento (por ejemplo “click”).
+ - El tipo de evento (por ejemplo “click”).
- which
- El botón o tecla presionada.
+ - El botón o tecla presionada.
- data
- Alguna información pasada cuando el evento es ejecutado.
+ - Alguna información pasada cuando el evento es ejecutado.
- target
- El elemento DOM que inicializó el evento.
+ - El elemento DOM que inicializó el evento.
- preventDefault()
- Cancela la acción predeterminada del evento (por ejemplo: seguir un enlace).
+ - Cancela la acción predeterminada del evento (por ejemplo: seguir un enlace).
- stopPropagation()
- Detiene la propagación del evento sobre otros elementos.
+ - Detiene la propagación del evento sobre otros elementos.
Por otro lado, la función controladora también tiene acceso al elemento DOM que inicializó el evento a través de la palabra clave this
. Para convertir a dicho elemento DOM en un objeto jQuery (y poder utilizar los métodos de la biblioteca) es necesario escribir $(this)
, como se muestra a continuación:
@@ -1890,7 +1890,7 @@ 5.3
A través del método $.fn.trigger
, jQuery provee una manera de disparar controladores de eventos sobre algún elemento sin requerir la acción del usuario. Si bien este método tiene sus usos, no debería ser utilizado para simplemente llamar a una función que pueda ser ejecutada con un click del usuario. En su lugar, debería guardar la función que se necesita llamar en una variable, y luego pasar el nombre de la variable cuando realiza el vinculo (binding). De esta forma, podrá llamar a la función cuando lo desee en lugar de ejecutar $.fn.trigger
.
Disparar un controlador de eventos de la forma correcta
var foo = function(e) {
@@ -1907,7 +1907,7 @@ foo(); // en lugar de realizar $('p').trigger('click')
Cuando trabaje con jQuery, frecuentemente añadirá nuevos elementos a la página, y cuando lo haga, necesitará vincular eventos a dichos elementos. En lugar de repetir la tarea cada vez que se añade un elemento, es posible utilizar la delegación de eventos para hacerlo. Con ella, podrá enlazar un evento a un elemento contenedor, y luego, cuando el evento ocurra, podrá ver en que elemento sucede.
La delegación de eventos posee algunos beneficios, incluso si no se tiene pensando añadir más elementos a la página. El tiempo requerido para enlazar controladores de eventos a cientos de elementos no es un trabajo trivial; si posee un gran conjunto de elementos, debería considerar utilizar la delegación de eventos a un elemento contenedor.
@@ -1925,7 +1925,7 @@// ... });
-5.5.1 Desvincular Eventos Delegados
+5.5.1 Desvincular Eventos Delegados
Si necesita remover eventos delegados, no puede hacerlo simplemente desvinculándolos. Para eso, utilice el método
$.fn.off
para eventos conectados con$.fn.on
, y$.fn.undelegate
para eventos conectados con$.fn.delegate
. Al igual que cuando se realiza un vinculo, opcionalmente, se puede pasar el nombre de una función vinculada.Desvincular eventos delegados
$('#myUnorderedList').off('click', 'li'); @@ -1933,10 +1933,10 @@
-5.6 Funciones Auxiliares de Eventos
+5.6 Funciones Auxiliares de Eventos
jQuery ofrece dos funciones auxiliares para el trabajo con eventos:
-5.6.1
+$.fn.hover
5.6.1
$.fn.hover
El método
$.fn.hover
permite pasar una o dos funciones que se ejecutarán cuando los eventosmouseenter
ymouseleave
ocurran en el elemento seleccionado. Si se pasa una sola función, está será ejecutada en ambos eventos; en cambio si se pasan dos, la primera será ejecutada cuando ocurra el eventomouseenter
, mientras que la segunda será ejecutada cuando ocurramouseleave
.Nota
@@ -1948,7 +1948,7 @@5.6.1
$ });
-5.6.2
+$.fn.toggle
5.6.2
$.fn.toggle
Al igual que el método anterior,
$.fn.toggle
recibe dos o más funciones; cada vez que un evento ocurre, la función siguiente en la lista se ejecutará. Generalmente,$.fn.toggle
es utilizada con solo dos funciones. En caso que utiliza más de dos funciones, tenga cuidado, ya que puede ser dificultar la depuración del código.La función auxiliar toggle
$('p.expander').toggle( @@ -1962,10 +1962,10 @@
5.6.2
-5.7 Ejercicios
+5.7 Ejercicios
-5.7.1 Crear una “Sugerencia” para una Caja de Ingreso de Texto
-Abra el archivo
+/ejercicios/index.html
en el navegador. Realice el ejericio utilizando el archivo/ejercicios/js/inputHint.js
o trabaje directamente con Firebug. La tarea a realizar es utilizar el texto del elemento label y aplicar una “sugerencia” en la caja de ingreso de texto. Los pasos ha seguir son los siguientes:5.7.1 Crear una “Sugerencia” para una Caja de Ingreso de Texto
+Abra el archivo
/ejercicios/index.html
en el navegador. Realice el ejercicio utilizando el archivo/ejercicios/js/inputHint.js
o trabaje directamente con Firebug. La tarea a realizar es utilizar el texto del elemento label y aplicar una “sugerencia” en la caja de ingreso de texto. Los pasos ha seguir son los siguientes:
Establecer el valor del elemento input igual al valor del elemento label.
- @@ -1976,8 +1976,8 @@
Añadir la clase “hint” al elemento input.
¿Qué otras consideraciones debe considerar si se desea aplicar esta funcionalidad a un sitio real?