Manual JQuery.
Manual JQuery.
ndice
ndice ............................................................................................................................................. 2
Formacin de la comunidad de aprendizaje ............................................................................ 4
Objetivo del curso ........................................................................................................................ 5
Objetivo .................................................................................................................................................. 5
Introduccin ........................................................................................................................................... 5
Qu es jQuery?...................................................................................................................................... 6
Nuevas Maneras de programar JavaScript con Jquery...................................................................... 7
jQuery .........................................................................................................Error! Marcador no definido.
Aspectos importantes ........................................................................................................................... 7
CDN ......................................................................................................................................................... 8
Nuestro servidor .................................................................................................................................. 10
Carga condicional ................................................................................................................................ 10
jQuery,$ ................................................................................................................................................ 16
Selectores CSS3.................................................................................................................................... 48
Alineacin de
expectativas:
Reglas de oro:
Cumplimiento de
expectativas
Introduccin
Bienvenidos al manual sobre jQuery , con el que pretendemos clarificar a los usuarios el mtodo de
trabajo y programacin de aplicaciones del lado del cliente, compatibles con todos los navegadores
ms comunes.
Nuestro servidor
Un servidor web es un equipo que esta en la escucha del puerto http(80), para nuestros fines
nos es suficiente con instalar apache web server, sin embargo cuando se habla de servidor
web casi siempre se incluye apache, php y msql,si deseas tener todos estos paquetes los
cuales te seran utiles a futuro te recomiendo instalar un xampp el cual esta disponible para:
GNU/Linux
Mac
Windows
Carga condicional
Por un lado hablamos de la carga de jQuery a travs de una red CDN y por otro lado la carga
a travs de nuestro propio servidor. Ambas opciones fueron descritas con detalle y
comentados los pros y contras, por lo que ahora vamos a ampliar un poco la informacin
presentando una manera nueva de cargar jQuery que aprovecha lo mejor de ambos mtodos.
En principio siempre es mejor cargar jQuery a travs de un CDN, que se supone que ser
mucho ms rpido que nuestro propio servidor. Sin embargo, en caso de fallo del CDN por
cualquier motivo, merece la pena ofrecer la posibilidad de acceder a jQuery a travs de una
copia de la librera en local. Esta tcnica nos ofrece total seguridad ante el uso de una copia
de jQuery o de otra librera trada desde un sitio web de terceros o CDN. La tcnica que
vamos a ver en este artculo es conocida como "fallback" y la vamos a implementar de
diversas maneras, para que cada uno escoja aquella que mejor le parezca.
10
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
< script>window.jQuery || document.write('<script src="js/jquery1.7.1.min.js">x3C/script>')</script>
Como se puede ver, consiste en un par de scripts, colocados uno detrs de otro, que sirven
para acceder a la librera jQuery por medio de dos fuentes. Primero se accede a un script
externo, dentro de ajax.googleapis.com, que es el CDN proporcionado por Google Code. Ese
CDN generalmente funcionar, pero en el caso que falle, tenemos el segundo script. En l se
evala window.jQuery y en caso que de un estado negativo (solo ser negativa la evaluacin
en el caso que jQuery no se haya podido cargar desde el CDN) se hace un document.write
para colocar otra llamada a un script distinto, que contiene la librera, pero traa de nuestro
propio servidor con una ruta relativa.
Nota: Quizs hayas reparado en la ruta del primer script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"
y te haya extraado que comience con dos barras. Eso no es un error de omisin del protocolo de comunicacin, sino
una URL absoluta que utiliza el mismo protocolo que la pgina que se est consultando. Es decir, si estamos en un
servidor seguro, el navegador acceder al script en la ruta
https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js y si estamos en un servidor normal se acceder por el
habitual http, en lugar de https.
Por este mismo motivo, si accedes al archivo HTML con el protocolo "file:" (es decir, hiciste
doble click sobre el archivo HTML para ejecutar la copia que tienes en el disco duro, se
intentara acceder al CDN por file://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js y
esa ruta nunca funcionara. Osea, que este sistema de comenzar una ruta absoluta por dos
barras inclindadas // te funcionar bien solo si ests accediendo al archivo a travs de un
servidor web.
De este modo podemos estar seguros que el script jQuery se traer del lugar ms ptimo, es
decir, del CDN, y si no se puede, desde la ruta en nuestro propio servidor de alojamiento. Es
una frmula rpida, sencilla y extremamente efectiva de optimizar la carga de tu jQuery y se
puede aplicar a cualquier otra librera que ests utilizando.
Mtodo optimizado de carga de jQuery con Modernizr.load
Modernizr es una librera Javascript que tambin te ofrece una serie de herramientas y
utilidades que te vendrn como anillo al dedo cuando quieras desarrollar webs de la nueva
generacin en HTML5. Estamos tratando acerca de estas libreras en el Manual de Modernizr.
En este artculo os traemos un mtodo de carga de jQuery a travs del mtodo load de
Modernizr que ya se explic brevemente en Modernizr.load() y la carga condicional de
libreras Javascript y CSS. Sin embargo, en esta ocasin vamos a comentar un par de detalles
y a hablar sobre un posible problema que podemos encontrarnos al utilizar esta tcnica.
11
Nota: Es interesante comentar como referencia que el mtodo load de Modernizr est desarrollado por autores
diferentes del propio Modernizr. Se trata de un mdulo implementado directamente en Modernizr llamado yepnope.js
que es un cargador asncrono y condicional de recursos que funciona sobre Javascript. Puedes saber ms atravs de
la propia web de yepnope.js.
Bsicamente vamos a hacer lo mismo, intentar traernos jQuery desde el CDN y si falla usar
una ruta de nuestro servidor. Pero antes de ver el cdigo para hacer esto voy a comentar la
ventaja que tiene este mtodo y tambin el inconveniente que le veo.
Como parte positiva destacamos que este mtodo de load de Modernizr es capaz de traerse
en paralelo varios scripts, aunque luego se ejecutan secuencialmente, o por el orden que
queramos. Incluso permite traernos scripts solo si se cumplen determinadas condiciones.
Osea, es algo un poco ms complejo que el mtodo de Boilerplate, pero tambin bastante
ms verstil. En casos en los que estemos adquiriendo muchos archivos de script puede ser
muy interesante, porque Modernizr.load se los descargar todos a la vez y no uno por uno, lo
que seguramente ahorrar tiempo de carga en nuestra pgina con respecto a otros mtodos
de carga.
En la parte negativa de este mtodo veo que te complica un poco las cosas a la hora de
colocar scripts en la pgina. Debido a las caractersticas del mtodo y la posibilidad de traerse
condicionalmente unos scripts y otros, estamos obligados a colocar algunos scripts en lugares
especficos, para que el propio flujo de carga y ejecucin de las libreras funcione bien. Si
colocamos scripts a la ligera, dispersos en el cdigo de la pgina, posiblemente tengamos el
problema de que se lleguen a ejecutar incluso antes que las libreras necesarias estn
disponibles.
Comencemos observando este cdigo:
Modernizr.load([
{
load: '//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js',
callback: function () {
if ( !window.jQuery ) {
Modernizr.load('js/jquery-1.7.1.min.js');
}
}
},
{
load: 'js/js-necesita-jquery.js'
}
]);
En esta llamada al mtodo load tenemos la carga secuencial de dos grupos de scripts,
definidos entre corchetes y enviados como parmetro a Modernizr.load. En el primer grupo
hacemos la carga de jQuery y en el segundo grupo se trae una librera que necesita jQuery.
12
Nota: Como deca, todos esos scripts se descargan en serie, pero se ejecutan de manera secuencial.
Lo bonito est en la carga de jQuery por CDN y el enunciado "callback:" que nos permite
indicar cdigo a ejecutar cuando la carga del fichero ha sido realizada. El flujo de carga sera
el siguiente.
Primero intentamos cargar jQuery desde el CDN con este cdigo:
load: '//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js',
Luego definimos una funcin callback para intentar comprobar si jQuery fue cargado
correctamente.
callback: function () {
if ( !window.jQuery ) {
Modernizr.load('js/jquery-1.7.1.min.js');
}
}
Esta funcin callback se ejecuta despus de que la carga anterior del CDN se haya
completado, o en caso contrario, si se produjo un error o un timeout.
Nota: Si has ledo la documentacin de Modernizr quizs hayas notado que aqu estamos utilizando el enunciado
"callback", mientras que ellos colocan el enunciado "complete". En principio complete debera funcionar, pero en la
prctica no he conseguido un efecto deseable cuando falla la carga de jQuery desde el CDN. Ocurre que con
"complete" se ejecutan los scripts que requieren jQuery sin haber esperado a cargar la copia local de las libreras. En
GitHub el creador de yepnope (la librera que implementa el load en Modernizr) sugiere utilizar el "callback" y con ello
conseguimos que funcione como se deseaba. En la misma nota comenta que este caso se resolver en una versin
ms moderna de yepnope.js.
Simplemente, en caso que no exista window.jQuery se carga la librera desde local. Con esto
podemos estar seguros que jQuery estar disponible, si no era en el CDN, al menos en la
copia que tenemos en nuestro propio servidor.
A continuacin tenemos el segundo bloque de script con una carga de un cdigo que necesita
jQuery para funcionar.
load: 'js/js-necesita-jquery.js'
Ese segundo bloque se ejecutar solo cuando el primer bloque haya terminado. Por supuesto,
en el caso que el CDN hubiese fallado, se esperar a disponer la copia de jQuery local.
13
Nota: Ante un fallo del CDN, Modernizr tardar 10 segundos en acceder a la copia en local. Esto es porque algunos
navegadores ofrecen el mismo tipo de seal ante una carga con xito y ante un error. Por ello ellos han preferido
utilizar un tiempo de timeout para saber si efectivamente una carga tuvo un error. Mientras espera el mtodo load
continua la descarga de otros scripts, pero no ejecuta nada hasta haber ejecutado la copia de jQuery que tenamos en
local.
Quizs todo esto te parezca mucho lio y demasiadas cosas a tener en cuenta para algo que
Boilerplate soluciona de una manera ms simple. Adems, debido al flujo de ejecucin del
mtodo Modernizr.load, estamos obligados a colocar en un lugar determinado todos aquellos
scripts que requieran de jQuery. Por ello personalmente, si nuestro nico objetivo es
implementar el fallback de jQuery, para usar una copia en local cuando falla el CDN, preferira
el mtodo de Boilerplate.
Ahora bien, podemos ver un segundo ejemplo de carga de liberas que puede que ofrezca un
poco ms de sentido a este mtodo load. Imagina que ests desarrollando una pgina que
usa decenas de scripts externos con plugins y que deseas cargarlos todos a la vez para
ahorrar tiempo, en lugar de la carga secuencial que ofreceran otros sistemas. Entonces
podras usar algo como esto.
Modernizr.load([{
load: '//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js',
callback: function () {
if (!window.jQuery) {
Modernizr.load('js/jquery-1.7.1.min.js');
}
}
}, {
load: ['js/jquery.animate-colors.js', 'js/jquery.easing.1.3.js'],
complete: function () {
jQuery(function () {
jQuery('#prueba').animate({
color: "#fa4",
"background-color": "#162"
}, 3000, "easeOutElastic");
});
}
}]);
Aqu tenemos un cdigo muy parecido al anterior, con la salvedad que estamos usando un
plugin adicional, aparte del propio script jQuery. En el primer bloque se carga jQuery o
bien la copia "fallback" que tenemos en local (del mismo modo que antes). La diferencia
es que ahora en el segundo bloque se carga un par de plugins y se utiliza un enunciado
"complete" para definir el cdigo que debe ejecutarse cuando se hayan cargado. Dentro
de la funcin definida en el "complete" podemos colocar cualquier cdigo que haga uso de
esos plugins jQuery. Este esquema puede repetirse para cargar no solo dos plugins, sino
varios, y la carga se realizar en paralel
14
Conclusin
Sin lugar a dudas, con estas tcnicas ya no hay escusa para usar un hospedaje de archivos
CDN sin preocuparse de eventuales problemas, porque siempre contars con una copia en
local para solventarlos. El sistema de Boilerplate es muy sencillo y usable sin prcticamente
ninguna modificacin en un sitio web y el sistema de Modernizr un poco ms complejo, pero
que requerir pensar las cosas de una manera distinta a como las vienes realizando.
Hasta aqu la referencia para saber como se puede combinar el hosting CDN y el local de
jQuery para optimizar la carga.
15
Las posibilidades de la funcin $() van mucho ms all de estos ejemplos sencillos, ya
que soporta casi todos los selectores definidos por CSS 3 (algo que dispondrn los
navegadores dentro de varios aos) y tambin permite utilizar XPath:
// Selecciona todos los prrafos de la pgina que tengan al menos un enlace
$('p[a]')
// Selecciona todos los radiobutton de los formularios de la pgina
$('input:radio')
// Selecciona todos los enlaces que contengan la palabra "Imprimir"
$('a:contains("Imprimir")');
// Selecciona los div que no estn ocultos
$('div:visible')
// Selecciona todos los elementos pares de una lista
$("ul#menuPrincipal li:even")
// Selecciona todos los elementos impares de una lista
$("ul#menuPrincipal li:odd")
// Selecciona los 5 primeros prrafos de la pgina
$("p:lt(5)")
16
Como se puede comprobar, las posibilidades de la funcin $() son prcticamente ilimitadas,
por lo que la documentacin de jQuery sobre los selectores disponibles es la mejor forma de
descubrir todas sus posibilidades.
Sintaxis Bsica
Comprensin de declaraciones, nombres de variables, espacios en blanco, y otras sintaxis
bsicas de JavaScript.
Declaracin simple de variable
var foo = 'hola mundo';
'hola mundo';
La tabulacin mejora la lectura del cdigo, pero no posee ningn significado especial
var foo = function() {
console.log('hola');
};
Operadores Basicos
Los operadores bsicos permiten manipular valores.
Concatenacin
var foo = 'hola';
var bar = 'mundo';
console.log(foo + ' ' + bar); // la consola de depuracin muestra 'hola mundo'
17
Multiplicacin y divisin
2 * 3;
2 / 3;
Incrementacin y decrementacin
var i = 1;
var j = ++i;
var k = i++;
El constructor Number, cuando es llamado como una funcin (como se muestra en el ejemplo)
obliga a su argumento a comportarse como un nmero. Tambin es posible utilizar el
operador de suma unaria, entregando el mismo resultado:
18
Operadores Lgicos
Los operadores lgicos permiten evaluar una serie de operandos utilizando operaciones AND
y OR.
Operadores lgicos AND y OR
var foo = 1;
var bar = 0;
var baz = 2;
foo || bar;
bar || foo;
El operador || (OR lgico) devuelve el valor del primer operando, si ste es verdadero; caso
contrario devuelve el segundo operando. Si ambos operandos son falsos devuelve falso
(false). El operador && (AND lgico) devuelve el valor del primer operando si ste es falso;
caso contrario devuelve el segundo operando. Cuando ambos valores son verdaderos
devuelve verdadero (true), sino devuelve falso.
Puede consultar la seccin Elementos Verdaderos y Falsos para ms detalles sobre que
valores se evalan como true y cuales se evalan como false.
Nota
Puede que a veces note que algunos desarrolladores utilizan esta lgica en flujos de control
en lugar de utilizar la declaracin if. Por ejemplo:
// realizar algo con foo si foo es verdadero
foo && doSomething(foo);
// establecer bar igual a baz si baz es verdadero;
19
Este estilo de declaracin es muy elegante y conciso; pero puede ser difcil para leer
(sobretodo para principiantes). Por eso se explcita, para reconocerlo cuando este leyendo
cdigo. Sin embargo su utilizacin no es recomendable a menos que est cmodo con el
concepto y su comportamiento.
Operadores de Comparacin
Los operadores de comparacin permiten comprobar si determinados valores son
equivalentes o idnticos.
Operadores de Comparacin
var foo
var
var
var
= 1;
bar = 0;
baz = '1';
bim = 2;
foo == bar;
foo != bar;
foo == baz;
Cdigo Condicional
A veces se desea ejecutar un bloque de cdigo bajo ciertas condiciones. Las estructuras de
control de flujo a travs de la utilizacin de las declaraciones if y else permiten hacerlo.
20
Nota
En una lnea singular, cuando se escribe una declaracin if, las llaves no son estrictamente
necesarias; sin embargo es recomendable su utilizacin, ya que hace que el cdigo sea
mucho ms legible.
Debe tener en cuenta de no definir funciones con el mismo nombre mltiples veces dentro de
declaraciones if/else, ya que puede obtener resultados no esperados.
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.
21
El operador ternario puede ser utilizado sin devolver un valor a la variable, sin embargo este
uso generalmente es desaprobado.
Declaracin Switch
En lugar de utilizar una serie de declaraciones if/else/else if/else, a veces puede ser til la
utilizacin de la declaracin switch. [Definicin: La declaracin Switch evala el valor de una
variable o expresin, y ejecuta diferentes bloques de cdigo dependiendo de ese valor.]
22
Las declaraciones switch son poco utilizadas en JavaScript, debido a que el mismo
comportamiento es posible obtenerlo creando un objeto, el cual posee ms potencial ya
que es posible reutilizarlo, usarlo para realizar pruebas, etc. Por ejemplo:
var stuffToDo = {
'bar' : function() {
alert('el valor es bar');
},
'baz' : function() {
alert('el valor es baz');
},
'default' : function() {
alert('de forma predeterminada se ejecutar este cdigo');
}
};
if (stuffToDo[foo]) {
stuffToDo[foo]();
} else {
stuffToDo['default']();
}
23
Bucles
Los bucles (en ingls loops) permiten ejecutar un bloque de cdigo un determinado nmero de
veces.
// 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 ingls scope) del bucle. Ms adelante en este
captulo se examinar en profundidad el concepto de alcance.*
Bucles Utilizando For
Un bucle utilizando for se compone de cuatro estados y posee la siguiente estructura:
for ([expresinInicial]; [condicin]; [incrementoDeLaExpresin])
[cuerpo]
El estado expresinInicial es ejecutado una sola vez, antes que el bucle comience. ste otorga
la oportunidad de preparar o declarar variables.
El estado condicin es ejecutado antes de cada repeticin, y retorna un valor que decide si el
bucle debe continuar ejecutndose o no. Si el estado condicional evala un valor falso el bucle
se detiene.
El estado incrementoDeLaExpresin es ejecutado al final de cada repeticin y otorga la
oportunidad de cambiar el estado de importantes variables. Por lo general, este estado implica
la incrementacin o decrementacin de un contador.
El cuerpo es el cdigo a ejecutar en cada repeticin del bucle.
Un tpico bucle utilizando for
for (var i = 0, limit = 100; i < limit; i++) {
// Este bloque de cdigo ser ejecutado 100 veces
console.log('Actualmente en ' + i);
// Nota: el ltimo registro que se mostrar
24
Puede notar que en el ejemplo se incrementa el contador dentro del cuerpo del bucle, pero
tambin es posible combinar la condicin y la incrementacin, como se muestra a
continuacin:
Bucle utilizando while con la combinacin de la condicin y la incrementacin
var i = -1;
while (++i < 100) {
// Este bloque de cdigo se ejecutar 100 veces
console.log('Actualmente en ' + i);
}
Se comienza en -1 y luego se utiliza la incrementacin previa (++i).
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 condicin sea evaluada.
do [cuerpo] while ([condicin])
25
Este tipo de bucles son bastantes atpicos 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.
Break y Continue
Usualmente, el fin de la ejecucin de un bucle resultar cuando la condicin no siga
evaluando un valor verdadero, sin embargo tambin es posible parar un bucle utilizando la
declaracin break dentro del cuerpo.
Detener un bucle con break
for (var i = 0; i < 10; i++) {
if (something) {
break;
}
}
Tambin puede suceder que quiera continuar con el bucle sin tener que ejecutar ms
sentencias del cuerpo del mismo bucle. Esto puede realizarse utilizando la declaracin
continue.
Saltar a la siguiente iteracin de un bucle
for (var i = 0; i < 10; i++) {
if (something) {
continue;
}
// La siguiente declaracin ser ejecutada
// si la condicin 'something' no se cumple
26
console.log('Hola');
}
Palabras Reservadas
JavaScript posee un nmero de palabras reservadas, o palabras que son especiales dentro
del mismo lenguaje. Debe utilizar estas palabras cuando las necesite para su uso especfico.
abstract
boolean
break
byte
case
catch
char
class
const
continue
debugger
default
delete
do
double
else
enum
export
extends
final
finally
float
for
function
goto
if
implements
27
import
in
instanceof
int
interface
long
native
new
package
private
protected
public
return
short
static
super
switch
synchronized
this
throw
throws
transient
try
typeof
var
void
volatile
while
with
28
Vectores
Los vectores (en espaol tambin llamados matrices o arreglos y en ingls arrays) son listas
de valores con ndice-cero (en ingls zero-index), es decir, que el primer elemento del vector
est en el ndice 0. stos son una forma prctica de almacenar un conjunto de datos
relacionados (como cadenas de caracteres), aunque en realidad, un vector puede incluir
mltiples tipos de datos, incluso otros vectores.
Un vector simple
var myArray = [ 'hola', 'mundo' ];
29
// 'hola'
// [ 'h', 'o', 'l', 'a' ]
Objetos
Los objetos son elementos que pueden contener cero o ms conjuntos de pares de nombres
claves y valores asociados a dicho objeto. Los nombres claves pueden ser cualquier palabra o
nmero vlido. El valor puede ser cualquier tipo de valor: un nmero, una cadena, un vector,
una funcin, incluso otro objeto.
[Definicin: Cuando uno de los valores de un objeto es una funcin, sta es nombrada como
un mtodo del objeto.] De lo contrario, se los llama propiedades.
Curiosamente, en JavaScript, casi todo es un objeto vectores, funciones, nmeros, incluso
cadenas y todos poseen propiedades y mtodos.
Creacin de un objeto literal
var myObject = {
sayHello: function() {
console.log('hola');
},
myName: 'Rebecca'
};
myObject.sayHello();
console.log(myObject.myName);
Nota
Notar que cuando se crean objetos literales, el nombre de la propiedad puede ser cualquier
identificador JavaScript, una cadena de caracteres (encerrada entre comillas) o un nmero:
var myObject = {
30
validIdentifier: 123,
'some string': 456,
99999: 789
};
Los objetos literales pueden ser muy tiles para la organizacin del cdigo, para ms
informacin puede leer el artculo (en ingls) Using Objects to Organize Your Code por
Rebecca Murphey.
Funciones
Las funciones contienen bloques de cdigo que se ejecutaran repetidamente. A las mismas se
le pueden pasar argumentos, y opcionalmente la funcin puede devolver un valor.
Las funciones pueden ser creadas de varias formas:
Declaracin de una funcin
function foo() { /* hacer algo */ }
greet('Rebecca', 'Hola');
31
console.log(foo);
// indefinido (undefined)
32
33
var myNumber = 3;
typeof
typeof
typeof
typeof
typeof
myFunction;
myObject;
myArray;
myString;
myNumber;
typeof null;
//
//
//
//
//
devuelve
devuelve
devuelve
devuelve
devuelve
'function'
'object'
'object' -- tenga cuidado
'string'
'number'
jQuery ofrece mtodos para ayudar a determinar el tipo de un determinado valor. Estos
mtodos sern vistos ms adelante.
La palabra clave this
En JavaScript, as como en la mayora de los lenguajes de programacin orientados a objetos,
this es una palabra clave especial que hace referencia al objeto en donde el mtodo est
siendo invocado. El valor de this es determinado utilizando una serie de simples pasos:
1. Si la funcin es invocada utilizando Function.call o Function.apply, this tendr el valor del
primer argumento pasado al mtodo. Si el argumento es nulo (null) o indefinido (undefined),
this har referencia el objeto global (el objeto window);
2. Si la funcin a invocar es creada utilizando Function.bind, this ser el primer argumento que
es pasado a la funcin en el momento en que se la crea;
3. Si la funcin es invocada como un mtodo de un objeto, this referenciar a dicho objeto;
4. De lo contrario, si la funcin es invocada como una funcin independiente, no unida a algn
objeto, this referenciar al objeto global.
34
35
},
secondObject = {
myName : 'Colin'
};
myObject.sayHello = sayHello;
secondObject.sayHello = sayHello;
sayHello();
myObject.sayHello();
secondObject.sayHello();
Nota
En algunas oportunidades, cuando se invoca una funcin que se encuentra dentro de un
espacio de nombres (en ingls namespace) amplio, puede ser una tentacin guardar la
referencia a la funcin actual en una variable ms corta y accesible. Sin embargo, es
importante no realizarlo en instancias de mtodos, ya que puede llevar a la ejecucin de
cdigo incorrecto. Por ejemplo:
var myNamespace = {
myObject: {
sayHello: function() {
console.log('Hola, mi nombre es ' + this.myName);
},
myName: 'Rebecca'
}
};
var hello = myNamespace.myObject.sayHello;
hello();
Para que no ocurran estos errores, es necesario hacer referencia al objeto en donde el
mtodo es invocado:
36
var myNamespace = {
myObject : {
sayHello : function() {
console.log('Hola, mi nombre es ' + this.myName);
},
myName : 'Rebecca'
}
};
var obj = myNamespace.myObject;
obj.sayHello();
Alcance
El alcance (en ingls scope) se refiere a las variables que estn disponibles en un bloque de
cdigo en un tiempo determinado. La falta de comprensin de este concepto puede llevar a
una frustrante experiencia de depuracin.
Cuando una variable es declarada dentro de una funcin utilizando la palabra clave var, sta
nicamente est disponible para el cdigo dentro de la funcin todo el cdigo fuera de
dicha funcin no puede acceder a la variable. Por otro lado, las funciones definidas dentro de
la funcin podrn acceder a la variable declarada.
Las variables que son declaradas dentro de la funcin sin la palabra clave var no quedan
dentro del mbito de la misma funcin 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;
Funciones tienen acceso a variables definidas dentro del mismo alcance
var foo = 'hola';
var sayHello = function() {
console.log(foo);
};
sayHello();
console.log(foo);
37
Variables con nombres iguales pero valores diferentes pueden existir en diferentes
alcances
var foo = 'mundo';
var sayHello = function() {
var foo = 'hola';
console.log(foo);
};
sayHello();
console.log(foo);
Las funciones pueden ver los cambios en las variables antes de que la funcin sea
definida
var myFunction = function() {
var foo = 'hola';
var myFn = function() {
console.log(foo);
};
foo = 'mundo';
return myFn;
};
var f = myFunction();
f(); // registra 'mundo' -- error
38
Alcance
// una funcin annima autoejecutable
(function() {
var baz = 1;
var bim = function() { alert(baz); };
bar = function() { alert(baz); };
})();
console.log(baz);
bar();
//
//
//
//
//
bim();
Clausuras
Las clausuras (en ingls closures) son una extensin del concepto de alcance (scope)
funciones que tienen acceso a las variables que estn disponibles dentro del mbito en donde
se cre la funcin. Si este concepto es confuso, no debe preocuparse: se entiende mejor a
travs 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 funcin observa el cambio en la variable, incluso despus de que la funcin sea definida,
resultando que en todos los clicks aparezca una ventana de alerta mostrando el valor 5.
Cmo establecer el valor de i?
/* esto no se comporta como se desea; */
/* cada click mostrar una ventana de alerta con el valor 5 */
for (var i=0; i<5; i++) {
$('<p>hacer click</p>').appendTo('body').click(function() {
alert(i);
});
}
39
Las clausuras tambin pueden ser utilizadas para resolver problemas con la palabra clave
this, la cual es nica en cada alcance.
Utilizar una clausura para acceder simultneamente a instancias de objetos internos y
externos.
var outerObj = {
myName: 'externo',
outerFunction: function() {
// provee una referencia al mismo objeto outerObj
// para utilizar dentro de innerFunction
var self = this;
var innerObj = {
myName: 'interno',
innerFunction: function() {
console.log(self.myName, this.myName); // registra 'externo interno'
}
};
innerObj.innerFunction();
console.log(this.myName); // registra 'externo'
}
};
outerObj.outerFunction();
40
Este mecanismo puede ser til cuando trabaje con funciones de devolucin de llamadas (en
ingls callbacks). Sin embargo, en estos casos, es preferible que utilice Function.bind ya que
evitar cualquier sobrecarga asociada con el alcance (scope).
Existe una forma abreviada para $(document).ready() la cual podr encontrar algunas veces;
sin embargo, es recomendable no utilizarla en caso que este escribiendo cdigo para gente
que no conoce jQuery.
Forma abreviada para $(document).ready()
$(function() {
console.log('el documento est preparado');
});
41
$(document).ready(readyFn);
Seleccin de Elementos
El concepto ms bsico de jQuery es el de seleccionar algunos elementos y realizar acciones
con ellos. La biblioteca soporta gran parte de los selectores CSS3 y varios ms no
estandarizados. En http://api.jquery.com/category/selectors/ se puede encontrar una completa
referencia sobre los selectores de la biblioteca.
A continuacin se muestran algunas tcnicas comunes para la seleccin de elementos:
Seleccin de elementos en base a su ID
$('#myId'); // notar que los IDs deben ser nicos por pgina
Pseudo-selectores
$('a.external:first');
42
$('div:visible');
$('div:gt(2)');
$('div:animated');
//
//
//
//
dentro del
selecciona
selecciona
selecciona
formulario #myForm
todos los divs visibles
todos los divs excepto los tres primeros
todos los divs actualmente animados
Nota
Cuando se utilizan los pseudo-selectores :visible y :hidden, jQuery comprueba la visibilidad
actual del elemento pero no si ste posee asignados los estilos CSS visibility o display en
otras palabras, verifica si el alto y ancho fsico del elemento es mayor a cero. Sin embargo,
esta comprobacin no funciona con los elementos <tr>; en este caso, jQuery comprueba si se
est aplicando el estilo display y va a considerar al elemento como oculto si posee asignado el
valor none. Adems, los elementos que an no fueron aadidos al DOM sern tratados como
ocultos, incluso si tienen aplicados estilos indicando que deben ser visibles (En la seccin
Manipulacin de este manual, se explica como crear y aadir elementos al DOM).
Como referencia, este es el fragmento de cdigo que utiliza jQuery para determinar cuando un
elemento es visible o no. Se incorporaron los comentarios para que quede ms claro su
entendimiento:
jQuery.expr.filters.hidden = function( elem ) {
var width = elem.offsetWidth, height = elem.offsetHeight,
skip = elem.nodeName.toLowerCase() === "tr";
// el elemento posee alto 0, ancho 0 y no es un <tr>?
return width === 0 && height === 0 && !skip ?
// entonces debe estar oculto (hidden)
true :
// pero si posee ancho y alto
// y no es un <tr>
width > 0 && height > 0 && !skip ?
// entonces debe estar visible
false :
//
//
//
//
43
Eleccin de Selectores
La eleccin de buenos selectores es un punto importante cuando se desea mejorar el
rendimiento del cdigo. Una pequea especificidad por ejemplo, incluir el tipo de elemento
(como div) cuando se realiza una seleccin por el nombre de clase puede ayudar bastante.
Por eso, es recomendable darle algunas pistas a jQuery sobre en que lugar del documento
puede encontrar lo que desea seleccionar. Por otro lado, demasiada especificidad puede ser
perjudicial. Un selector como #miTabla thead tr th.especial es un exceso, lo mejor sera utilizar
#miTabla th.especial.
jQuery ofrece muchos selectores basados en atributos, que permiten realizar selecciones
basadas en el contenido de los atributos utilizando simplificaciones de expresiones regulares.
// encontrar todos los <a> cuyo atributo rel terminan en "thinger"
$("a[rel$='thinger']");
Estos tipos de selectores pueden resultar tiles pero tambin ser muy lentos. Cuando sea
posible, es recomendable realizar la seleccin utilizando IDs, nombres de clases y nombres
de etiquetas.
Si desea conocer ms sobre este asunto, Paul Irish realiz una gran presentacin sobre
mejoras de rendimiento en JavaScript (en ingles), la cual posee varias diapositivas centradas
en selectores.
Comprobar Selecciones
Una vez realizada la seleccin de los elementos, querr conocer si dicha seleccin entreg
algn resultado. Para ello, pueda que escriba algo as:
if ($('div.foo')) { ... }
44
Sin embargo esta forma no funcionar. Cuando se realiza una seleccin utilizando $(),
siempre es devuelto un objeto, y si se lo evala, ste siempre devolver true. Incluso si la
seleccin no contiene ningn elemento, el cdigo dentro del bloque if se ejecutar.
En lugar de utilizar el cdigo mostrado, lo que se debe hacer es preguntar por la cantidad de
elementos que posee la seleccin que se ejecut. Esto es posible realizarlo utilizando la
propiedad JavaScript length. Si la respuesta es 0, la condicin evaluar falso, caso contrario
(ms de 0 elementos), la condicin ser verdadera.
Guardar Selecciones
Cada vez que se hace una seleccin, una gran cantidad de cdigo es ejecutado. jQuery no
guarda el resultado por si solo, por lo tanto, si va a realizar una seleccin que luego se har
de nuevo, deber salvar la seleccin en una variable.
Guardar selecciones en una variable
var $divs = $('div');
Nota
En el ejemplo Guardar selecciones en una variable, la variable comienza con el signo de
dlar. Contrariamente a otros lenguajes de programacin, en JavaScript este signo no posee
ningn significado especial es solamente otro carcter. Sin embargo aqu se utilizar para
indicar que dicha variable posee un objeto jQuery. Esta prctica una especie de Notacin
Hngara es solo una convencin y no es obligatoria.
Una vez que la seleccin es guardada en la variable, se la puede utilizar en conjunto con los
mtodos de jQuery y el resultado ser igual que utilizando la seleccin original.
45
Nota
La seleccin obtiene slo los elementos que estn en la pgina cuando se realiz dicha
accin. Si luego se aaden elementos al documento, ser necesario repetir la seleccin o
aadir los elementos nuevos a la seleccin guardada en la variable. En otras palabras, las
selecciones guardadas no se actualizan mgicamente cuando el DOM se modifica.
Refinamiento y Filtrado de Selecciones
A veces, puede obtener una seleccin que contiene ms de lo que necesita; en este caso, es
necesario refinar dicha seleccin. jQuery ofrece varios mtodos para poder obtener
exactamente lo que desea.
Refinamiento de selecciones
$('div.foo').has('p');
// el elemento div.foo contiene elementos <p>
$('h1').not('.bar');
// el elemento h1 no posse la clase 'bar'
$('ul li').filter('.current'); // un item de una lista desordenada
// que posse la clase 'current'
$('ul li').first();
// el primer item de una lista desordenada
$('ul li').eq(5);
// el sexto item de una lista desordenada
46
:disabled
47
:text
Selectores bsicos
Selector universal: selecciona todos los elementos de la pgina (CSS 2)
jquery("*")
Selector de tipo o etiqueta: selecciona todos los elementos con el tipo de etiqueta indicado
(CSS 1)
jQuery("div")
48
Selector de clase: selecciona todos los elementos con la clase indicada (atributo class) (CSS
1)
jQuery("div.entrada")
Selector de identificador: selecciona el elemento con el identificador (atributo id) indicado
(CSS 1)
jQuery("div#cabecera")
Grupos de selectores: se puede combinar el resultado de varios selectores distintos
separndolos con comas (CSS 1)
jquery("p,div,a")
Selectores de atributos
Selector de atributo: selecciona elementos que tengan un cierto atributo (CSS 2)
jquery("a[rel]")
Tambin se puede seleccionar aquellos que tengan un cierto valor para un atributo (CSS 2)
jquery("a[rel='nofollow']")
O que tengan un valor distinto del indicado (jQuery)
jQuery("a[rel!='nofollow']")
Aquellos cuyo valor empieza por una cierta cadena (CSS 3)
jquery("a[href^='http://mundogeek.net/']")
Los que terminan con una cierta cadena (CSS 3)
jquery("a[href$='.com']")
Y los que contienen una cierta cadena (CSS 3)
jquery("a[href*='geek']")
Por ltimo, podemos hacer combinaciones de todo lo anterior (CSS 2)
jquery("a[rel='nofollow'][href]")
49
Selectores de widgets
Pseudo clase botn: selecciona todos los botones (jQuery)
jquery(":button")
Pseudo clase checkbox: selecciona todos los checkboxes (jQuery)
jquery(":checkbox")
Pseudo clase archivo: selecciona todos los widgets de tipo archivo (jQuery)
jquery(":file")
Pseudo clase cabeceras: selecciona todas las cabeceras (jQuery)
jquery(":header")
Pseudo clase imagen: selecciona todas las imgenes (jQuery)
jquery(":image")
Pseudo clase input: selecciona todos los widgets de tipo input (jQuery)
jquery(":input")
Pseudo clase contrasea: selecciona todos los elementos password (jQuery)
jquery(":password")
Pseudo clase radiobutton: selecciona todos los elementos radiobutton (jQuery)
jquery(":radio")
Pseudo clase reset: selecciona todos los elementos reset (jQuery)
jquery(":reset")
Pseudo clase seleccionado: selecciona las opciones seleccionadas en un select (jQuery)
jquery(":select")
50
51
52
Selector de prximo adyacente: similar al anterior, pero slo selecciona el adyacente directo
(CSS 2)
jquery("div.entrada + p")
Pseudo clase padre: selecciona los padres de otros elementos (jQuery)
jquery("h2:parent")
Pseudo clase vaco: selecciona los elementos que no tengan ningn hijo, incluyendo texto
plano (CSS 3)
jquery(":empty")
Otros selectores
Pseudo clase animado: selecciona todos los elementos que estn en proceso de animacin
en este momento (jQuery)
jquery(":animated")
Pseudo clase contiene: selecciona todos los elementos que contengan el texto indicado,
directamente o en uno de los hijos (jQuery)
jquery("div:contains('Mundo geek')")
Pseudo clase tiene: selecciona todos los elementos que contengan al menos un elemento que
responda al selector indicado (jQuery)
jquery("div:has(h2)")
Pseudo clase negacin: selecciona todos los elementos que no cumplan con el selector dado
(CSS 3)
jquery("div:not(.entrada)")
53
Selector de hijos
Se trata de un selector similar al selector descendente, pero muy diferente en su
funcionamiento. Se utiliza para seleccionar un elemento que es hijo de otro elemento y se
indica mediante el "signo de mayor que" (>).
Mientras que en el selector descendente slo importa que un elemento est dentro de otro,
independientemente de lo profundo que se encuentre, en el selector de hijos el elemento debe
ser hijo directo de otro elemento.
p > span { color: blue; }
<p>
<span>Texto1</span>
</p>
<p>
<a href="#">
<span>Texto2</span>
</a>
</p>
En el ejemplo anterior, el selector p > span se interpreta como "cualquier elemento <span>
que sea hijo directo de un elemento <p>", por lo que el primer elemento <span> cumple la
condicin del selector. Sin embargo, el segundo elemento <span> no la cumple porque es
descendiente pero no es hijo directo de un elemento <p>.
Utilizando el mismo ejemplo anterior se pueden comparar las diferencias entre el selector
descendente y el selector de hijos:
p a { color: red; }
p > a { color: red; }
<p>
<a href="#">Enlace1</a>
</p>
<p>
<span>
<a href="#">Enlace2</a>
</span>
</p>
El primer selector es de tipo descendente (p a) y por tanto se aplica a todos los elementos <a>
que se encuentran dentro de elementos <p>. En este caso, los estilos de este selector se
aplican a los dos enlaces.
54
El segundo selector es de hijos (p > a) por lo que obliga a que el elemento <a> sea hijo directo
de un elemento <p>. Por tanto, los estilos del selector p > a no se aplican al segundo enlace
del ejemplo anterior.
Selector adyacente
El selector adyacente se emplea para seleccionar elementos que son hermanos (su elemento
padre es el mismo) y estn seguidos en el cdigo HTML. Este selector emplea en su sintaxis
el smbolo +. Si se considera el siguiente ejemplo:
h1 + h2 { color: red }
<body>
<h1>Titulo1</h1>
<h2>Subttulo</h2>
...
<h2>Otro subttulo</h2>
...
</body>
Los estilos del selector h1 + h2 se aplican al primer elemento <h2> de la pgina, pero no al
segundo <h2>, ya que:
El elemento padre de <h1> es <body>, el mismo padre que el de los dos elementos <h2>.
As, los dos elementos <h2> cumplen la primera condicin del selector adyacente.
El primer elemento <h2> aparece en el cdigo HTML justo despus del elemento <h1>,
por lo que este elemento <h2> tambin cumple la segunda condicin del selector
adyacente.
Por el contrario, el segundo elemento <h2> no aparece justo despus del elemento <h1>,
por lo que no cumple la segunda condicin del selector adyacente y por tanto no se le
aplican los estilos de h1 + h2.
El siguiente ejemplo puede ser til para los textos que se muestran como libros:
p + p { text-indent: 1.5em; }
En muchos libros es habitual que la primera lnea de todos los prrafos est indentada, salvo
la primera lnea del primer prrafo. El selector p + p selecciona todos los prrafos que estn
dentro de un mismo elemento padre y que estn precedidos por otro prrafo. En otras
palabras, el selector p + p selecciona todos los prrafos de un elemento salvo el primer
prrafo.
55
El selector adyacente requiere que los dos elementos sean hermanos, por lo que su elemento
padre debe ser el mismo. Si se considera el siguiente ejemplo:
p + p { color: red; }
<p>Lorem ipsum dolor sit amet...</p>
<p>Lorem ipsum dolor sit amet...</p>
<div>
<p>Lorem ipsum dolor sit amet...</p>
</div>
El primer prrafo no va precedido de ningn otro prrafo, por lo que no cumple una de las
condiciones de p + p
El segundo prrafo va precedido de otro prrafo y los dos comparten el mismo padre, por
lo que se cumplen las dos condiciones del selector p + p y el prrafo muestra su texto de
color rojo.
Selector de atributos
El ltimo tipo de selectores avanzados lo forman los selectores de atributos, que permiten
seleccionar elementos HTML en funcin de sus atributos y/o valores de esos atributos.
Los cuatro tipos de selectores de atributos son:
56
Selectores de CSS 3
La futura versin CSS 3 incluye todos los selectores de CSS 2.1 y aade otras decenas de
selectores, pseudo-clases y pseudo-elementos. La lista provisional de novedades y su
explicacin detallada se puede encontrar en el mdulo de selectores de CSS 3.
En primer lugar, CSS 3 aade tres nuevos selectores de atributos:
De esta forma, se pueden crear reglas CSS tan avazadas como las siguientes:
/* Selecciona todos los enlaces que apuntan a una direccin de correo electrnico
*/
a[href^="mailto:"] { ... }
57
Otro de los nuevos selectores de CSS 3 es el "selector general de elementos hermanos", que
generaliza el selector adyacente de CSS 2.1. Su sintaxis es elemento1 ~ elemento2 y
selecciona el elemento2 que es hermano de elemento1 y se encuentra detrs en el cdigo
HTML. En el selector adyacente la condicin adicional era que los dos elementos deban estar
uno detrs de otro en el cdigo HTML, mientras que ahora la nica condicin es que uno est
detrs de otro.
Si se considera el siguiente ejemplo:
h1 + h2 { ... }
h1 ~ h2 { ... }
/* selector adyacente */
/* selector general de hermanos */
<h1>...</h1>
<h2>...</h2>
<p>...</p>
<div>
<h2>...</h2>
</div>
<h2>...</h2>
El primer selector (h1 + h2) slo selecciona el primer elemento <h2> de la pgina, ya que es el
nico que cumple que es hermano de <h1> y se encuentra justo detrs en el cdigo HTML.
Por su parte, el segundo selector (h1 ~ h2) selecciona todos los elementos <h2> de la pgina
salvo el segundo. Aunque el segundo <h2> se encuentra detrs de <h1> en el cdigo HTML,
no son elementos hermanos porque no tienen el mismo elemento padre.
Los pseudo-elementos de CSS 2.1 se mantienen en CSS 3, pero cambia su sintaxis y ahora
se utilizan :: en vez de : delante del nombre de cada pseudo-elemento:
::before, selecciona la parte anterior al contenido de un elemento para insertar nuevo contenido
generado.
::after, selecciona la parte posterior al contenido de un elemento para insertar nuevo contenido
generado.
58
sea el hijo ensimo de su padre. Este selector es til para seleccionar el segundo prrafo de un
elemento, el quinto elemento de una lista, etc.
elemento:empty, selecciona el elemento indicado pero con la condicin de que no tenga ningn
hijo. La condicin implica que tampoco puede tener ningn contenido de texto.
la condicin de que sean respectivamente los primeros o ltimos hijos de su elemento padre.
59
Otro de los nuevos selectores que incluir CSS 3 es :not(), que se puede utilizar para
seleccionar todos los elementos que no cumplen con la condicin de un selector:
:not(p) { ... } /* selecciona todos los elementos de la pgina que no sean
prrafos */
:not(#especial) { ... } /* selecciona cualquier elemento cuyo atributo id no sea
"especial" */
Aunque todava faltan muchos aos hasta que la versin CSS 3 sustituya a la actual
versin CSS 2.1, los navegadores que ms se preocupan por los estndares (Opera,
Safari y Firefox) incluyen soporte para varios o casi todos los selectores de CSS 3.
Existe una herramienta llamada CSS Selectors test que permite comprobar los selectores
que soporta el navegador con el que se hace la prueba.
60
sem a justo. Aenean metus. Quisque eu purus at leo vehicula laoreet. Aenean
et libero. Curabitur rhoncus erat non quam. Sed sodales fringilla diam. Nulla
velit sapien, fringilla elementum, ultrices nec, fringilla id, erat. Morbi at
nibh eget justo molestie mattis. Ut eleifend dapibus ante. Sed vitae risus in
est suscipit congue. Mauris suscipit ligula at lectus.</P>
Adems aadiremos un botn, que ser el que nos permita modificar el estilo con jQuery. Es
importante darle al botn un id, ya que jQuery utilizar el id para asignarle la funcionalidad.
1. <button id="cambiar">Cambiar estilo</button>
61
El cdigo jQuery lo vamos a poner dentro de su funcin ready. Hay que recordar que la
funcin ready es la que se empieza a ejecutar cuando tenemos cargada toda la pgina.
1.
2. $(document).ready(function(){
3.
...
4. });
5.
Mediante la funcin $() accedemos al botn de la pgina. Para ello pasamos como parmetro
el id del botn precedido de una almohadilla (#). El evento que disparar el resto del cdigo
ser click.
1.
2.
$("#cambiar").click(function() {...}
3.
Ya solo nos queda poner el cdigo que nos permite modificar el estilo con jQuery. Esto lo
conseguimos con la funcin .css. Esta funcin nos permite pasarle por parmetro los atributos
CSS que queremos modificar.
1.
2. $("p").css({'color':'red','font-size':'1.3em','background':'yellow'});
3.
Hay que ver tanto los atributos CSS como los valores asignados van entre comillas.
El cdigo para modificar el estilo con jQuery completo sera:
1.
2. <script type="text/javascript">
3. $(document).ready(function(){
4.
$("#cambiar").click(function() {
5.
$("p").css({'color':'red','font-size':'1.3em','background':'yellow'});
6.
});
62
7.
8. });
9. </script>
Mtodos jQuery
Los mtodos del DOM son aquellos que permiten manipular los elementos de la pgina,
aadir o quitar etiquetas, cambiarlas de sitio o duplicarlas, leer atributos, crearlos o cambiarles
su valor. Estas son algunas tareas que podemos hacer con los mtodos del DOM de jQuery
de una manera ms simple de como lo haramos con javascript.
Ya vimos en la pgina anterior los mtodos .html() y .text(), los cuales permiten cambiar el
contenido de un elemento. Estos tambin podemos considerarlos mtodos del DOM, pues con
ellos tambin se cambia el contenido de la pgina. Aparte de estos mtodos veremos aqu
algunos ms:
Mtodos .append() y .prepend()
El mtodo .apppend aade texto o cdigo HTML al final del elemento al que se refiere,
por ejemplo:
$("div").append("<p>aadido un ltimo prrafo</p>");
Este cdigo aade un parrafo al final de todos los elementos "div" de la pgina.
Observese que el texto o cdigo a aadir se pasa dentro del parntesis como parmetro.
De forma similar, el mtodo .prepend() aade texto o cdigo html al principio del elemento
seleccionado:
$("div").append("<p>aadido un primer prrafo</p>");
63
64
Copiar elementos
Otras veces lo que buscamos es copiar un elemento de la pgina en otro lugar,
conservando o no el original. Para ello utilizaremos el mtodo .clone():
copia=$("#div1").clone(true)
Hemos hecho una copia de un elemento existente, el cual hemos guardado en una
variable. Al mtodo "clone" podemos pasarle como parmetros las palabras true | false. Si
pasamos true indicamos que se copian tambin los eventos javascript que pudiera tener
asociados, si pasamos false los eventos javascript no se copian. Si no ponemos parmetro se
entiende que hemos puesto false.
Para incorporarlo en otro lugar de la pgina utilizaremos cualquiera de los mtodos para
aadir un elemento, por ejemplo:
$("#elemento3").after(copia);
Esto coloca el elemento copiado despues del elemento con id="elemento3"
Si queremos conservar el elemento inicial dejamos la cosa como est, sin embargo si
queremos borrarlo y que quede slo el elemento copiado, basta con eliminar el primer
elemento:
$(#div1").remove();
65
Si queremos conservar los dos elementos, y sin embargo no queremos que tengan el
mismo "id", lo que tenemos que hacer es cambiarle el "id" al segundo. El "id" es un atributo,
por lo tanto basta con cambiarle el valor de este atributo. esto lo veremos a continuacin.
Atributos
Manipular los atributos con jQuery es tan fcil como utilizar el mtodo .attr(). Dependiendo
de si lo que queremos es una lectura o una escritura, utilizaremos uno o dos parmetros.
Lectura : Para leer el valor de un atributo debemos pasar un parmetro en el que
indicamos el nombre del mismo. Ej.:
ruta=$("#enlace1").attr("href");
En este ejemplo en la variable ruta obtenemos una cadena de texto que indica la url del
enlace.
Si queremos leer el contenido de varios elementos asociados a un selector, (por ejemplo
$("a")) debemos usar el mtodo "each" tal como hemos visto en pginas anteriores.
Escritura : Para cambiar el valor de un atributo le pasaremos dos parmetros, el primero
indica el nombre del atributo, y el segundo su valor. Si el atributo no existe, este se crea y se
aade a la etiqueta, ej.:
$("#enlace1").attr("href","http://es.yahoo.com/");
Este cdigo cambia el valor del atributo href y por tanto la ruta del enlace al que se refiere
el selector.
Vemos por tanto que cambiando el valor de los atributos podemos hacer cosas como
cambiar la ruta de los enlaces, cambiar una imagen por otra, cambiar un elemento de clase o
ponerle un nuevo "id", etc.
Escritura mltiple : Supongamos que en un elemento queremos cambiar varios atributos
al mismo tiempo, por ejemplo queremos cambiar una imagen por otra. No solo queremos
cambiar el atributo "src", sino tambin el atributo "alt" y el atributo "width". Podramos hacer
una lnea parecida a la anterior para cada atributo, de la siguiente manera:
$("#imagen1").attr("src","objetos/foto1.jpg");
$("#imagen1").attr("alt","primera foto");
$("#imagen1").attr("width","250");
sin embargo podemos hacerlo de forma ms rpida de la siguiente manera.
66
$("#imagen1").attr({
"src" : "objetos/foto1.jpg" ,
"alt" : "primera foto" ,
"width" : "250"
});
Aqu dentro del parntesis ponemos unas llaves, dentro de las cuales escribimos las
parejas "nombre" : "valor". Entre el nombre del atributo y su valor escribimos el signo de dos
puntos, cada pareja va separada de la siguiente por una coma.
Esta estructura se puede usar no slo para la escritura de atributos, sino para otro tipo de
mtodos de escritura, como por ejemplo, y tal como veremos ms adelante, el estilo CSS.
Eliminar atributos : Para eliminar un atributo utilizaremos el mtodo .removeAttr().
Dentro del parntesis pasaremos como argumento el nombre del atributo que queremos
eliminar:
$("#enlace1").removeAttr("target");
Este cdigo quita el atributo target del enlace con id="enalce1. el atributo desaparece
completamente de la etiqueta, tanto su valor como el nombre.
El mtodo .prop() : podemos utilizar el mtodo .prop() tambin para tener acceso a los
atributos de la misma manera que utilizamos el mtodo .attr(). Es decir, si se le pasa un slo
argumento obtenemos la lectura, y pasndole dos, obtenemos la escritura.
El mtodo .prop() en realidad se utiliza para manipular las propiedades de un elemento,
sin embargo, como se considera que los atributos son propiedades del elemento, podemos
usarlo de igual manera.
Con el mtodo .prop() podemos manipular ademas otra serie de propiedades que no son
atributos, como por ejemplo autofocus, readOnly, async, ....
67
En el ejemplo anterior agregamos la clase unaClase a todos los elementos de tipo div los
cuales fueron envueltos en el conjunto mediante jQuery, esta clase puede ser definida en una
hoja de estilo o dentro del mismo cdigo HTML entre las etiquetas de estilo y variar segn el
estilizado que deseemos dar, si por ejemplo deseamos agregar letra de color verde a todos
los div, nuestra clase estara definida de la siguiente manera:
?
1.unaClase{
color: green;
2
}
3
Quitar clases
La eliminacin de nombres de clase resulta igual de sencilla que la operacin de aadir, basta
con utilizar la funcin removeClass la cual quita el nombre de la clase o clases
especificadas, de cada elemento del conjunto envuelto. Al igual que addClass recibe una
cadena de parmetro y nos regresa un nuevo conjunto envuelto.
?
1jQuery("div").removeClass("unaClase");
Con esta sentencia quitaramos el texto de color verde en todas nuestras capas div, dejando
nicamente las otras clases que pertenecan previamente a los elementos.
68
Para fijar el valor de una propiedad (si hay muchos elementos que recupera la funcin $, se
inicializan para todos):
$(elemento).attr(nombre de propiedad,valor)
Ejemplo: Definir una tabla sin el atributo border. Al presionar un botn aadirle la propiedad
border con el valor 1. Si se presiona otro botn recuperar y mostrar el valor del atributo border
y por ltimo si se presiona otro botn eliminar la propiedad border.
pagina1.html
<html>
<head>
<title>Problema</title>
<script type="text/javascript" src="../jquery.js"></script>
<script type="text/javascript" src="funciones.js"></script>
</head>
<body>
<input type="button" id="boton1" value="Aadir
propiedad border"><br>
<input type="button" id="boton2" value="Recuperar
valor de la propiedad border"><br>
<input type="button" id="boton3" value="Eliminar la
propiedad border">
<table id="tabla1">
<tr>
<td>1111111111</td><td>1111111111</td><td>1111111111</td><td>1111111111</td>
</tr>
<tr>
<td>2222222222</td><td>2222222222</td><td>2222222222</td><td>2222222222</td>
</tr>
<tr>
69
<td>3333333333</td><td>3333333333</td><td>3333333333</td><td>3333333333</td>
</tr>
</table>
</body>
</html>
funciones.js
var x;
x=$(document);
x.ready(inicializarEventos);
function inicializarEventos()
{
var x=$("#boton1");
x.click(agregarPropiedadBorder);
x=$("#boton2");
x.click(recuperarPropiedadBorder);
x=$("#boton3");
x.click(eliminarPropiedadBorder);
}
function agregarPropiedadBorder()
{
var x=$("#tabla1");
x.attr("border","1");
}
function recuperarPropiedadBorder()
{
var x=$("#tabla1");
if (x.attr("border")!=undefined)
alert(x.attr("border"));
else
alert("No est definida la propiedad border en la tabla");
}
function eliminarPropiedadBorder()
{
var x=$("#tabla1");
x.removeAttr("border");
}
70
71
Por otro lado, si se est escribiendo un encadenamiento de mtodos que incluyen muchos
pasos, es posible escribirlos lnea por lnea, haciendo que el cdigo luzca ms agradable para
leer.
Formateo de cdigo encadenado
$('#content')
.find('h3')
.eq(2)
.html('nuevo texto para el tercer elemento h3');
Si desea volver a la seleccin original en el medio del encadenado, jQuery ofrece el mtodo
$.fn.end para poder hacerlo.
Restablecer la seleccin original utilizando el mtodo $.fn.end
$('#content')
.find('h3')
.eq(2)
.html('nuevo texto para el tercer elemento h3')
.end() // reestablece la seleccin a todos los elementos h3 en #content
.eq(0)
.html('nuevo texto para el primer elemento h3');
Nota
El encadenamiento es muy poderoso y es una caracterstica que muchas bibliotecas
JavaScript han adoptado desde que jQuery se hizo popular. Sin embargo, debe ser utilizado
con cuidado. Un encadenamiento de mtodos extensivo pueden hacer un cdigo
extremadamente difcil de modificar y depurar. No existe una regla que indique que tan largo o
corto debe ser el encadenado pero es recomendable que tenga en cuenta este consejo.
72
3.
4. }
Es importante resaltar que this contendr la instancia del elemento que disparo el evento, por
ejemplos si a los enlaces (a) le agregamos el evento click, this contendr la instancia del
enlace especifo sobre del cual hallamos hecho click.
jQuery define varios eventos para agregar un manejador de dicho evento basta con agregar
una funcin en la llamada de dicho evento esta funcin puede recibir un argumento event el
cual es til para obtener informacin de dicho evento o para cambiar el comportamiento del
mismo
El evento mouseover se produce cuando el puntero del mouse est sobre el elemento
seleccionado. El mtodo mouseover () activa el evento mouseover o atribuye una funcin
a ejecutar cuando se produzca un evento mouseover.
73
74
Eventos hover
Evento .hover()
El evento hover se lanza cuando el ratn est encima del elemento sobre el que hemos
enlazado el evento. Este evento suele ser muy usado, por ejemplo, mostrar un texto cuando el
usuario pone el ratn sobre una zona, o mostrar unos botones de navegacin cuando
movemos el ratn sobre una fotografa.
Ejemplo
Eventos mousemove
Evento .mounsemove()
El evento mounsemove se produce cada vez que el puntero del ratn se mueve dentro del
elemento seleccionado. El mtodo mousemove() activa el evento mousemove o atribuye
una funcin a ejecutar cuando se produzca un evento mousemove.
Cada vez que el usuario mueve el ratn un pxel, un evento mousemove ocurre. Toma los
recursos del sistema para procesar todos los eventos mousemove.
75
76
Evento dblclick
Evento .dbclick()
Es el evento que se lanza cuando damos doble clic sobre el elemento que hemos asociado el
evento.
Ejemplo
77
78
79
80
Fadeout()
El mtodo jQuery Fadeout () se utiliza para desaparecer un elemento visible.
Sintaxis:
$(selector).fadeOut(speed,callback);
81
82
83
Unidad 9 DOM
El Modelo de Objetos del Documento (DOM) permite ver el mismo documento de otra manera,
describiendo el contenido del documento como un conjunto de objetos que un programa
Javascript puede actuar sobre ellos.
Qu es el Modelo de Objetos del Documento?
Acorde al W3C el Modelo de Objetos del Documento es una interfaz de programacin de
aplicaciones (API) para documentos vlidos HTML y bien construidos XML. Define la
estructura lgica de los documentos y el modo en que se accede y manipula.
El DOM permite un acceso a la estructura de una pgina HTML mediante el mapeo de los
elementos de esta pgina en un rbol de nodo. Cada elemento se convierte en un nodo y
cada porcin de texto en un nodo de texto.
Como ya sabemos, con $("p") seleccionamos todos los prrafos de la pgina. Luego con el
mtodo CSS asignamos un estilo, en este caso para cambiar el color del fondo. Esto en
realidad jQuery lo hace con una iteracin con todos los prrafos de la pgina, sin que
tengamos que hacer nosotros nada ms y es genial que se permita en el uso del framework.
Pero qu pasa si queremos cambiar el fondo de los prrafos utilizando colores alternos?
En este caso no podemos hacerlo en una sola lnea de cdigo, pero each nos vendr como
anillo al dedo.
84
Imaginemos que tenemos una serie de prrafos en la pgina y queremos cambiar el color de
fondo a los mismos, de manera que tengan colores alternos, para hacer dinmicamente un
tpico diseo para los listados.
Entonces podramos hacer lo siguiente:
$("p").each(function(i){
if(i%2==0){
$(this).css("background-color", "#eee");
}else{
$(this).css("background-color", "#ccc");
}
});
Con $("p") tengo todos los prrafos. Ahora con each puedo recorrerlos uno a uno. Para cada
uno ejecutaremos la funcin que enviamos como parmetro a each(). En esa funcin recibo
como parmetro una variable "i" que contiene el ndice actual sobre el que estoy iterando.
Con if(i%2==0) estoy viendo si el entero del ndice "i" es par o impar. Siendo par coloco un
color de fondo al elemento y siendo impar coloco otro color de fondo.
Como se puede ver, con la variable "this" tenemos acceso al elemento actual. Pero OJO, que
este elemento no es un objeto jQuery, as que no podramos enviarle mtodos del framework
jQuery hasta que no lo expandamos con la funcin jQuery. As pues, tenemos que hacer
$(this) para poder invocar al mtodo css(). Por si no queda claro este punto mirar las
diferencias entre estas dos lneas de cdigo:
this.css("background-color", "#ccc");
$(this).css("background-color", "#ccc");
85
Manipulacin
Una vez realizada la seleccin de los elementos que desea utilizar, la diversin comienza.
Es posible cambiar, mover, remover y duplicar elementos. Tambin crear nuevos a travs de
una sintaxis simple.
Todos los mtodos de esta seccin manipular el DOM de alguna manera. Algunos de ellos
simplemente cambiar uno de los atributos de un elemento (tambin figura en la categora de
Atributos), mientras que otros establecen las propiedades de estilo de un elemento (tambin
figura en la categora CSS). Y otros modifican elementos enteros (o grupos de elementos) a s
mismos-insercin, copia, eliminacin, etc. Todos estos mtodos se les conoce como "set", a
medida que cambian los valores de las propiedades.
Algunos de estos mtodos-como. Attr (),. HTML () y. Val ()-tambin actan como "captadores"
Extraer informacin de elementos DOM para su uso posterior.
Manipulacin con DOM
. addClass ()
Agrega la clase especificada (s) a cada uno de la serie de elementos
coincidentes.
.after()
Inserte el contenido, especificado por el parmetro, despus de cada elemento en
el conjunto de elementos coincidentes.
. appendTo ()
Inserte cada elemento en el conjunto de elementos emparejados hasta el final de
la diana.
. attr ()
Obtener el valor de un atributo para el primer elemento en el conjunto de
elementos relacionados o establecer uno o ms atributos para cada elemento
coincidente.
.before()
Inserte el contenido, especificado por el parmetro, antes de cada elemento en el
conjunto de elementos coincidentes.
. clone ()
Crea una copia en profundidad del conjunto de elementos coincidentes.
. css ()
Obtener el valor de una propiedad de estilo para el primer elemento en el
conjunto de elementos relacionados o establecer una o ms propiedades de CSS
para cada elemento coincidente.
. detach ()
Retire el conjunto de elementos coincidentes de la DOM.
86
. empty ()
Retire todos los nodos secundarios del conjunto de elementos coincidentes de la
DOM.
. hasClass ()
Determina si alguno de los elementos coincidentes se asignan a la clase dada.
.height()
Consigue la altura computada actual para el primer elemento en el conjunto de
elementos coincidentes o establecer la altura de cada elemento coincidente.
.html()
Obtiene el contenido HTML del primer elemento en el conjunto de elementos
coincidentes o establecer el contenido HTML de cada elemento coincidente.
. innerHeight ()
Consigue la altura computada actual para el primer elemento en el conjunto de
elementos coincidentes, incluyendo el relleno pero no frontera.
. innerWidth ()
Obtener el ancho interior computada actual (incluyendo las protecciones, pero no
frontera) para el primer elemento en el conjunto de elementos coincidentes o
establecer la anchura interior de cada elemento coincidente.
. InsertAfter ()
Inserte cada elemento en el conjunto de elementos coincidentes despus de la
meta.
. insertBefore ()
Inserte cada elemento en el conjunto de elementos coincidentes antes de la meta.
. offset ()
Obtenga las coordenadas actuales del primer elemento, o establecer las
coordenadas de cada elemento, en el conjunto de elementos coincidentes, en
relacin con el documento.
. outerHeight ()
Consigue la altura computada actual para el primer elemento en el conjunto de
elementos coincidentes, incluyendo el relleno, borde y margen opcionalmente.
Devuelve un nmero (without px) la representacin del valor o un valor nulo si
un llamamiento a un conjunto vaco de elementos.
. outerWidth ()
Obtener el ancho computado actual para el primer elemento en el conjunto de
elementos coincidentes, incluyendo el relleno y el borde.
.position()
Obtener las coordenadas actuales del primer elemento en el conjunto de
elementos emparejados, en relacin con el padre offset.
. prepend ()
Insertar contenido, especificado por el parmetro, al principio de cada elemento
en el conjunto de elementos emparejados.
.prependTo()
Inserte cada elemento en el conjunto de elementos emparejados hasta el
comienzo de la diana.
.prop()
87
88
.wrap()
Envuelva una estructura HTML alrededor de cada elemento en el conjunto de
elementos coincidentes.
.wrapAll()
Envuelva una estructura HTML alrededor de todos los elementos en el conjunto
de elementos coincidentes.
.wrapInner()
Envuelva una estructura HTML todo el contenido de cada elemento en el conjunto
de elementos coincidentes.
luego si hacemos x.text() obtenemos el contenido del prrafo con id igual a parrafo1. Luego si
queremos cambiar el texto del prrafo deberamos disponer:
var x=$("#parrafo1");
x.text("Este es el texto nuevo");
Pero hay que tener mucho cuidado cuando utilizamos jQuery ya que podemos cambiar el
contenido de muchos elementos con una sola llamada al mtodo text, por ejemplo:
var x=$("p");
x.text("Este texto aparece en todos los prrafos del documento");
El cdigo anterior crea un objeto jQuery con la referencia a todos los prrafos contenidos en el
documento. Luego si llamamos al mtodo text envindole una cadena, esta aparecer en todo
el documento remplazando el contenido de los prrafos actuales.
El siguiente problema muestra el acceso y modificacin unitaria y mltiple de contenidos de
elementos.
Ejemplo:
Problema.html
<html>
<head>
<title>Problema</title>
<meta charset="utf-8">
<script type="text/javascript" src="../jquery.js"></script>
<script language="javascript" src="funciones.js" type="text/javascript"></script>
</head>
89
<body>
<input type="button" value="Obtener el texto contenido en un
prrafo" id="boton1"><br>
<input type="button" value="Modificar el texto de un prrafo"
id="boton2"><br>
<input type="button" value="Modificar el texto de los elementos
td de una tabla" id="boton3"><br>
<p id="parrafo1">Texto del primer prrafo</p>
<table border="1">
<tr>
<td>celda 1,1</td><td>celda 1,2</td>
<td>celda 2,1</td><td>celda 2,2</td>
</tr>
</table>
</body>
</html>
Funciones.js
var x;
x=$(document);
x.ready(inicializarEventos);
function inicializarEventos()
{
var x=$("#boton1");
x.click(extraerTexto);
x=$("#boton2");
x.click(modificarTexto);
x=$("#boton3");
x.click(modificarDatosTabla);
}
function extraerTexto()
{
var x=$("#parrafo1");
alert(x.text());
}
function modificarTexto()
{
var x=$("#parrafo1");
x.text("Nuevo texto del prrafo");
}
function modificarDatosTabla()
{
var x=$("td");
x.text("texto nuevo");
}
90
Los plugins no son nada del otro mundo, son simplemente eso, extensiones del framework
para crear cualquier funcionalidad que podamos necesitar en los elementos de la pgina, por
muy especial, o tonta, que sea.
Cmo se crea un plugin de jQuery:
Los plugins en jQuery se crean asignando una funcin a la propiedad "fn" del objeto jQuery. A
partir de entonces, esas funciones asignadas se podrn utilizar en cualquier objeto jQuery,
como uno de los muchos mtodos que dispone dicho objeto principal del framework.
91
Confeccionar
una pgina que muestre una lista de hipervnculos con los distintos signos del horscopo y
luego al ser presionado no recargue la pgina completa sino que se enve una peticin al
servidor y el mismo retorne la informacin de dicho signo, luego se actualice solo el contenido
de un div del archivo HTML.
pagina1.html
<html>
<head>
<title>Problema</title>
<link rel="StyleSheet" href="estilos.css" type="text/css">
<script type="text/javascript" src="../jquery.js"></script>
<script type="text/javascript" src="funciones.js"></script>
</head>
<body>
<h1>Signos del horscopo.</h1>
<div id="menu">
<p><a id="enlace1" href="pagina1.php?cod=1">Aries</a></p>
<p><a id="enlace2" href="pagina1.php?cod=2">Tauro</a></p>
<p><a id="enlace3" href="pagina1.php?cod=3">Geminis</a></p>
<p><a id="enlace4" href="pagina1.php?cod=4">Cancer</a></p>
<p><a id="enlace5" href="pagina1.php?cod=5">Leo</a></p>
<p><a id="enlace6" href="pagina1.php?cod=6">Virgo</a></p>
<p><a id="enlace7" href="pagina1.php?cod=7">Libra</a></p>
<p><a id="enlace8" href="pagina1.php?cod=8">Escorpio</a></p>
<p><a id="enlace9" href="pagina1.php?cod=9">Sagitario</a></p>
<p><a id="enlace10" href="pagina1.php?cod=10">Capricornio</a></p>
<p><a id="enlace11" href="pagina1.php?cod=11">Acuario</a></p>
<p><a id="enlace12" href="pagina1.php?cod=12">Piscis</a></p>
92
</div>
<div id="detalles">Seleccione su signo.</div>
</body>
</html>
funciones.js
var x;
x=$(document);
x.ready(inicializarEventos);
function inicializarEventos()
{
var x;
x=$("#menu a");
x.click(presionEnlace);
}
function presionEnlace()
{
var pagina=$(this).attr("href");
var x=$("#detalles");
x.load(pagina);
return false;
}
pagina1.php
<?php
header('Content-Type: text/html; charset=ISO-8859-1');
if ($_REQUEST['cod']==1)
echo "<strong>Aries:</strong> Hoy los cambios sern fsicos,
personales, de carcter, Te sentirs impulsivo y tomars
iniciativas. Perodo en donde considerars unirte a agrupaciones
de beneficencia, o de ayuda a los dems.";
if ($_REQUEST['cod']==2)
echo "<strong>Tauro:</strong> Hoy los cambios sern privados,
ntimos. Recuerdos. Ayuda, solidaridad. Asuntos en lugares de retiro. Tu
cnyuge puede aportar buen status a tu vida o apoyo a tu profesin.";
if ($_REQUEST['cod']==3)
echo "<strong>Gminis:</strong> Los asuntos de hoy tienen
que ver con las amistades, reuniones, actividades con ellos. Da esperanzado,
ilusiones. Mucha energa sexual y fuerza emocional. Deseos difciles
de controlar.";
if ($_REQUEST['cod']==4)
echo "<strong>Cancer:</strong> Este da la profesin
y las relaciones con superiores y con tu madre sern de importancia. Actividad
en relacin a estos temas. Momentos positivos con compaeros de
trabajo. Actividad laboral agradable.";
if ($_REQUEST['cod']==5)
echo "<strong>Leo:</strong> Este da los estudios, los
viajes, el extranjero y la espiritualidad sern lo importante. Pensamientos,
religin y filosofa tambin. Vivencias krmicas de
93
estilos.css
#menu {
font-family: Arial;
margin:5px;
}
#menu p {
margin:0px;
padding:0px;
}
#menu a {
display: block;
padding: 3px;
width: 160px;
94
background-color: #f7f8e8;
border-bottom: 1px solid #eee;
text-align:center;
}
#menu a:link, #menu a:visited {
color: #f00;
text-decoration: none;
}
#menu a:hover {
background-color: #369;
color: #fff;
}
#detalles {
background-color:#ffc;
text-align:left;
font-family:verdana;
border-width:0;
padding:5px;
border: 1px dotted #fa0;
margin:5px;
}
95
</head>
<body>
<h1>Signos del horscopo.</h1>
<div id="menu">
<p><a id="enlace1" href="pagina1.php?cod=1">Aries</a></p>
<p><a id="enlace2" href="pagina1.php?cod=2">Tauro</a></p>
<p><a id="enlace3" href="pagina1.php?cod=3">Geminis</a></p>
<p><a id="enlace4" href="pagina1.php?cod=4">Cancer</a></p>
<p><a id="enlace5" href="pagina1.php?cod=5">Leo</a></p>
<p><a id="enlace6" href="pagina1.php?cod=6">Virgo</a></p>
<p><a id="enlace7" href="pagina1.php?cod=7">Libra</a></p>
<p><a id="enlace8" href="pagina1.php?cod=8">Escorpio</a></p>
<p><a id="enlace9" href="pagina1.php?cod=9">Sagitario</a></p>
<p><a id="enlace10" href="pagina1.php?cod=10">Capricornio</a></p>
<p><a id="enlace11" href="pagina1.php?cod=11">Acuario</a></p>
<p><a id="enlace12" href="pagina1.php?cod=12">Piscis</a></p>
</div>
<div id="detalles">Seleccione su signo.</div>
</body>
</html>
funciones.js
var x;
x=$(document);
x.ready(inicializarEventos);
function inicializarEventos()
{
var x;
x=$("#menu a");
x.click(presionEnlace);
}
function presionEnlace()
{
var pagina=$(this).attr("href");
var x=$("#detalles");
x.ajaxStart(inicioEnvio);
x.load(pagina);
return false;
}
function inicioEnvio()
{
var x=$("#detalles");
x.html('<img src="../cargando.gif">');
}
96
Estilos.css
#menu {
font-family: Arial;
margin:5px;
}
#menu p {
margin:0px;
padding:0px;
}
#menu a {
display: block;
padding: 3px;
width: 160px;
background-color: #f7f8e8;
border-bottom: 1px solid #eee;
text-align:center;
}
#menu a:link, #menu a:visited {
color: #f00;
text-decoration: none;
}
#menu a:hover {
background-color: #369;
color: #fff;
}
#detalles {
background-color:#ffc;
text-align:left;
font-family:verdana;
border-width:0;
padding:5px;
border: 1px dotted #fa0;
margin:5px;
}
pagina1
<?php
header('Content-Type: text/html; charset=ISO-8859-1');
if ($_REQUEST['cod']==1)
echo "<strong>Aries:</strong> Hoy los cambios sern fsicos,
personales, de carcter, Te sentirs impulsivo y tomars
iniciativas. Perodo en donde considerars unirte a agrupaciones
de beneficencia, o de ayuda a los dems.";
if ($_REQUEST['cod']==2)
echo "<strong>Tauro:</strong> Hoy los cambios sern privados,
ntimos. Recuerdos. Ayuda, solidaridad. Asuntos en lugares de retiro. Tu
cnyuge puede aportar buen status a tu vida o apoyo a tu profesin.";
97
if ($_REQUEST['cod']==3)
echo "<strong>Gminis:</strong> Los asuntos de hoy tienen
que ver con las amistades, reuniones, actividades con ellos.
Da esperanzado, ilusiones. Mucha energa sexual y fuerza emocional.
Deseos difciles de controlar.";
if ($_REQUEST['cod']==4)
echo "<strong>Cancer:</strong> Este da la profesin
y las relaciones con superiores y con tu madre sern de importancia.
Actividad en relacin a estos temas. Momentos positivos con compaeros de
trabajo. Actividad laboral agradable.";
if ($_REQUEST['cod']==5)
echo "<strong>Leo:</strong> Este da los estudios, los
viajes, el extranjero y la espiritualidad sern lo importante.
Pensamientos, religin y filosofa tambin. Vivencias krmicas de
la poca te vuelven responsable tomando decisiones.";
if ($_REQUEST['cod']==6)
echo "<strong>Virgo:</strong> Para este da toma importancia
tu vida sexual, tal vez miedos, temas legales, juicios o herencias.
Experiencias extraas. Hay karma de prueba durante este perodo en tu
parte psicolgica, generndose algunos replanteos.";
if ($_REQUEST['cod']==7)
echo "<strong>Libra:</strong> Hoy todo asunto tiene que ver con
tu pareja, tambin con socios, con la gente o el pblico. Ellos
sern lo ms importante del da. Ganancias a travs
de especulaciones o del juego. Actividades vocacionales artsticas.";
if ($_REQUEST['cod']==8)
echo "<strong>Escorpio:</strong> Hoy todo asunto tiene que ver
con temas de trabajo y de salud. Presta atencin a ambos. Experiencias
diversas con compaeros. Durante este perodo tendrs muchos
recursos para ganar dinero.";
if ($_REQUEST['cod']==9)
echo "<strong>Sagitario:</strong> Durante este da se
vivirn cambios en relacin a los noviazgos o a los hijos. Creatividad,
actividad, diversiones y salidas. Perodo de encuentros con personas o
situaciones que te impresionan.";
if ($_REQUEST['cod']==10)
echo "<strong>Capricornio:</strong> Los cambios del da
tienen que ver con tu hogar, con la convivencia y con el padre. Asuntos relativos
al carcter en la convivencia. El karma de responsabilidad de estos momentos
te acercar al mundo de lo desconocido, mucha madurez y contacto con el
ms all.";
if ($_REQUEST['cod']==11)
echo "<strong>Acuario:</strong> Hoy todo asunto tiene que ver
con el entorno inmediato, hermanos y vecinos, con la comunicacin, los
viajes cortos o traslados frecuentes. El hablar y trasladarse ser importante
hoy. Mentalidad e ideas activas.";
if ($_REQUEST['cod']==12)
echo "<strong>Piscis:</strong> Durante este da se vivirn
cambios en la economa, movimientos en los ingresos, negocios, valores.
sleep(1);
98
Lo nuevo en este problema es que llamamos al mtodo ajaxStart con el mismo objeto jQuery
que llama al mtodo load:
function presionEnlace() {
var pagina=$(this).attr("href");
var x=$("#detalles");
x.ajaxStart(inicioEnvio);
x.load(pagina);
return false; }
Luego cuando se activa la peticin de la pgina al servidor el objeto jQuery llama a la funcin
inicioEvento, donde mostramos el gif animado:
function inicioEnvio() {
var x=$("#detalles");
x.html('<img src="../cargando.gif">');
No ocultamos el gif animado ya que se est mostrando en el div #detalles. Dicho div ser
inicializado por el objeto jQuery con los datos enviados por el servidor y borrar el elemento
img.
$.get y $.post (Pasando datos al servidor por los mtodos GET y POST)
Utilizamos estas funciones cuando no queremos inyectar directamente los datos a nuestra
pgina, sino que queremos procesarlos y eventualmente agregarlos en distintas partes.
La sintaxis de la funcin $.get es distinta al ya utilizado $, en este caso es una funcin global
de la librera jQuery:
$.get([nombre de la pgina],[parmetros a enviarse por el mtodo get],
[funcin que recibe los datos del servidor])
Tambin podemos llamarla:
jQuery.get([nombre de la pgina],[parmetros a enviarse por el mtodo get],
[funcin que recibe los datos del servidor])
La funcin $.post es idntica a la funcin $.get, lo nico que difiere es como el protocolo HTTP
empaqueta los datos y los enva al servidor. Normalmente se utiliza la funcin $.post, ya que
no est limitado la cantidad de datos que se pueden enviar al servidor.
Problema: Implementar una aplicacin que calcule el cuadrado de un nmero que ingresamos
por teclado. La operacin se realiza en el servidor, le enviamos los datos mediante la funcin
de jQuery $.get
pagina1.html
<html>
<head>
<title>Problema</title>
<script type="text/javascript" src="../jquery.js"></script>
<script type="text/javascript" src="funciones.js"></script>
99
</head>
<body>
<form action="pagina1.php" method="post" id="formulario">
Ingrese nro:<input type="text" name="nro" id="nro"
size="10"><br>
<input type="submit" value="Calcular el cuadrado" id="enviar">
<div id="resultados"></div>
</form>
</body>
</html>
fuciones.js
var x;
x=$(document);
x.ready(inicializarEventos);
function inicializarEventos()
{
var x;
x=$("#enviar");
x.click(presionSubmit);
}
function presionSubmit()
{
var v=$("#nro").attr("value");
$.get("pagina1.php",{numero:v},llegadaDatos);
return false;
}
function llegadaDatos(datos)
{
alert(datos);
}
pagina1.php
<?php
$cuadrado=$_REQUEST['numero']*$_REQUEST['numero'];
echo $cuadrado;
?>
100
Cuando presionamos el botn extraemos el valor del control text y llamamos a la funcin $.get
indicando el nombre de la pgina a llamar, un objeto literal con todos los parmetros y sus
valores (en este caso solo tenemos un parmetro llamado numero) y finalmente el nombre de
la funcin que se ejecutar cuando lleguen los datos del servidor:
function presionSubmit() {
var v=$("#nro").attr("value");
$.get("pagina1.php",{numero:v},llegadaDatos);
return false; }
La funcin que se ejecuta cuando llegan los datos del servidor recibe un string:
function llegadaDatos(datos)
alert(datos); }
101
Conclusiones finales
102
Fuentes de consulta
Cibergrafa
Autor:
Ttulo:
Vnculo:
Editor:
Ao de publicacin:
Autor:
Ttulo:
Vnculo:
http://api.jquery.com/category/manipulation/
Editor:
Ao de publicacin:
Autor:
Ttulo:
Vnculo:
http://librojquery.com/#recorrer-el-dom
Editor:
Ao de publicacin:
Autor:
Ttulo:
Vnculo:
http://www.1stwebdesigner.com/css/36-eye-catching-jquery-navigationmenus/
Editor:
Ao de publicacin:
Autor:
Ttulo:
Vnculo:
Editor:
Ao de publicacin:
Autor:
Ttulo:
Vnculo:
http://www.eldinero.com.do/influencers/
Las 5 estrategias en Social Media usadas por grandes empresas para aumentar
sus ventas
http://www.juanmerodio.com/2010/las-5-estrategias-en-social-media-usadaspor-grandes-empresas-para-aumentar-sus-ventas/
Editor:
103
Ao de publicacin:
104