Nota: Redacté este artículo algún tiempo antes de que se lanzara la versión 1.0 de jQuery. Ha llovido desde entonces. Y también ha habido cambios en la API. Algún día revisaré el artículo y lo pondré al día. Mientras tanto, ve con cuidado ;)
Queridos niños, creo que ya es hora de que hable un poquito fondo de la librería de mis amores, jQuery, una librería javascript ligera y sumamente útil, desarrollada por el incansable John Resig.
Como se explica en el sitio web correspondiente:
jQuery is a new type of Javascript library. It is not a huge, bloated, framework promising the best in AJAX - nor is just a set of needlessly complex enhancements - jQuery is designed to change the way that you write Javascript.
(Traduzco: jQuery es un nuevo tipo de librería de javascript. No es un extenso e inflado framework que prometa lo mejor en AJAX, ni un conjunto de innecesarias y complicadas mejoras: jQuery ha sido diseñado para cambiar tu forma de escribir javascript. [N. del T. Si hay algún traductor en la sala, le pido mil perdones.])
Y bueno, la mía si la ha cambiado. Echemos un vistazo a una línea de código escrito utilizando jQuery:
$('tbody tr:even').addClass('alt');
Dicho código se patea todos los tbody de nuestras tablas y añade a las filas impares (even) la clase alt, que nos permitirá dibujar nuestras tablas cual si cebras fueren. (Por supuesto, necesitaremos añadir el estilo a nuestro CSS, con un tr.alt { background: #ddd; } será suficiente.)
En resumen: jQuery sirve para seleccionar elementos del DOM y manipularlos.
Selección de elementos
El núcleo de jQuery es la función $, que permite recoger en una colección cualquier conjunto de elementos DOM utilizando selectores CSS o, si lo preferimos, XPath (ojo que en algunos casos la sintaxis es un pelín distinta, revisa la documentación al respecto).
Algunos ejemplos:
// todos los elementos de tipo `e`
$('e');
// elementos de tipo `e` que son descendientes
// de elementos de tipo `f`
$('f e');
// elementos de tipo `e` que son hijos
// de elementos de tipo `f`
$('f > e');
// elementos con clase `cwt`
$('.cwt');
// elementos con identificador `contacts`
$('#contacts');
// elementos de tipo `e` que contienen
// un atributo `foo`
$('e[@foo]');
// elementos de tipo `e` que contienen
// un atributo `foo` con valor `bar`
$('e[@foo="bar"]');
// y por supuesto...
$('h2 a, h1 + *, #error-holder.error, #sidebar h3');
Manipulación
¿Qué interés tendría acceder a los elementos si no pudiéramos hacer perrerías con ellos? He aquí algunos ejemplos de lo que puedes hacer una vez tienes la colección en tus manos:
Jugar con los estilos
// añadir y quitar clases
$('tbody tr:even').addClass('alt');
$('body').removeClass('fixedWidth');
// asignar reglas de estilo
$('.cwt').css({'border': '4px solid red', 'color': 'red'});
// leer valores computados
$('body').css('height');
// devuelve la altura _computada_ del elemento body
Encontrarás la documentación pertinente en BaseStyle.
Asignar manejadores de eventos
Los métodos bind y unbind sirven pasa asignar y deasignar manejadores de eventos. En el módulo de eventos avanzados, disponemos de algunos extras, como click, unclick, oneclick…
// al hacer clic sobre la cabecera de una tabla
// se disparará la función `$.sortableTable.onclickSort`
$('thead th').bind('click', $.sortableTable.onclickSort);
// lo mismo en otras palabras
$('thead th').click($.sortableTable.onclickSort);
// si queremos disparar el manejador una sola vez
$('thead th').oneclick($.sortableTable.onclickSort);
// por supuesto, también podemos eliminar manejadores
('thead th').unbind('click', $.sortableTable.onclickSort);
Otro método súmamente útil, de nombre hover, acepta como parámetros dos funciones, dos. La primera de ellas se ejecutará cuando el ratón se posicione sobre el elemento, la segunda, cuando salga de él.
$('tbody tr').hover(
function(e) {
$(this).addClass('over');
},
function(e) {
$(this).removeClass('over');
}
);
Y el colmo de los colmos, ready nos permite comenzar a trabajar con el DOM cuando se completa la carga del documento, sin necesidad de esperar (como sucede si utilizamos window.onload) a que se complete también la carga de las imágenes:
$(document).ready(function(e) {
alert('Tonto el que espere a cargar las imágenes');
});
Importante: el uso de $(document).ready(f) es incompatible con scripts que utilicen el infame `document.write`, lo que lo deja fuera de circulación si tu sitio incluye anuncios de Google (como es mi caso). Como alternativa, siempre nos quedará `load`.
Encontrarás la información sobre asignación básica de manejadores en BaseEvents. Los eventos avanzados se tratan en event
Utilizar efectos
Otro tema que jQuery resuelve con sencillez es el de los efectos. Los métodos hide, show, slideDown, slideUp, fadeIn y fadeOut añaden algo de dinamismo visual a la presentación del sitio. Puedes ver algunas demos en jQuery to the Rescue.
Filtrar la colección
En BaseTraverse encontrarás todos los métodos. Como adelanto:
// `find` nos sirve para localizar elementos
// dentro de un contexto. Por ejemplo:
$('#paraque')
.find('a')
.click(function(e) {
alert('paraguayo');
});
// como ves, los métodos de jQuery son encadenables
// también podemos buscar en un contexto
// pasándolo como segundo parámetro a `$`
var pq = $('#paraque');
$('a', pq)
.click(function(e) {
alert('paraguayo');
});
// `filter` elimina de la colección
// los elementos que casan con la expresión
$('p').filter('.notme');
// `not` mantiene en la colección
// únicamente los elementos que la cumplen
$('p').not('.me');
Dejaré para una segunda entrega los métodos de jQuery para manipular el DOM a conciencia y trabajar con AJAX, la iteración con each, las instrucciones para crear plugins y unas cuantas cosillas más. Te sugiero echar un vistazo al tutorial de John, pero no terminaré esta anotación, no señor, sin poner algún ejemplo práctico como pequeña recapitulación de lo visto hasta ahora.
Mejorando las tablas, estilo jQuery
Manos a la obra: crearemos un script que nos permita agregar a las tablas de datos un poco de gracia. Sean una o más tablas convenientemente marcadas con su thead, su tbody y su canesú, sea incluida la última versión de jQuery (siempre disponible en http://jquery.com/src/latest.js) y sea un poquito de CSS. En unas poquitas líneas vamos a:
añadir a las filas pares una clase
altque nos permita pintar los registros en colores alternos yañadir a todas las filas un manejador para la entrada de ratón que les añadirá la clase
overy un manejador para la salida del ratón (que eliminará la clase).
Pasen y vean:
$(document).ready(function(e) {
$('tbody tr:even').addClass('alt');
$('tbody tr').hover(
function(e) {
$(this).addClass('over');
},
function(e) {
$(this).removeClass('over');
}
);
});
Actualización: He preparado una demo con una tablita cebreada gracias a un primohermano de este script (y la filmografía de Luis Buñuel).
Se aceptan (y ruegan) sugerencias para próximos artículos sobre el tema. Hasta la próxima.


24 comentarios RSS
Buenas, acabo de leer tu artículo de introducción a jQuery, y al final me he pasado por el ejemplo de la tabla cebreada. El caso es que ahi se usa una asignacion class=”year” en un montón de td’s, y ya que usa jQuery, pues por qué no hacer lo siguiente:
$('tbody tr>td:last-child').addClass('year');
Y olvidarse de tanto class? ;) Mucho más limpio no? Ale, espero que sus guste la sugerencia
Saludos!
Marc, sí me ha gustado la sugerencia. No lo hice así porque considero que los datos numéricos se deben alinear a la derecha independientemente de si el usuario tiene o no activado el javascript.
Y da gracias que no utilicé un
align="right";)¿no sería mejor usar y para dar características de alineación a la derecha a toda la columna de fechas y así evitar poner class=”year” para cada ?
saludos,
[…] Si todavía no conoces jQuery, quizá te interese empezar por echar un vistazo a la introducción de hace unos días para saber de qué va la cosa. […]
Gracias por esta introducción. Apenas empiezo con el jQuery y ya ahora todo tiene más sentido.
[…] a jQUery, vía No comments Tags:none […]
Hola Choan,
Despues de la charla en la ultima quedada he empezado a mirarmelo. Reconozco que cuando miraba los primeros ejemplos en la pagina de JQuery, estaba flipando…
A ver si puedo trastear y en la siguiente comentar (preguntar) algo con sentido…
Saludos
Kike: lo que ha quedado de tu comentario es ininteligible.
Albir, Felixe: confío en haberos sido de utilidad.
esta linea imagino que pone la clase al ultimo td de la tr (last-child).
$(’tbody tr>td:last-child’).addClass(’year’);
pero como se pone esa clase a (por ejemplo) las columnas 2,5, y 7?
o hay otro modo mas inteligente sin usar numeros fijos de columnas?, ya que es un engorro si insertamos una columna nueva y entonces ya cambian los numeros de columna?
Muchas gracias por la enseñanza. :)
[…] Podeis echarle un vistazo a la API, muy completa y algún que otro manual de uso, para hacer aplicaciones tan espectaculares como alguna que ya conocemos. […]
[…] Y compárenlo con este otro, publicado seis meses antes en http://dizque.lacalabaza.net/sotanos/2006/05/introduccion-a-jquery/: […]
[…] JQuery es una librería javascript para manejar los elementos DOM o CSS de una página HTML. No es una extensa librería para manejar AJAX si no tiene funciones para ayudarnos a escribir javascript de forma mas sencilla. Este post esta basado en Introducción a Jquery de Choan Gálvez, licenciado bajo Creative Commons, si buscan una referencias mas completa puedes visitar el post original. […]
[…] Introduccion a jQuery (en Dizque) […]
Gracias, ha sido un excelente tutorial de introducciòn. Agradezco la amabilidad de hacer mas digerible el tema del jquery, es fenomenal…
Oye, porque no algun tutorial sobre los efectos?
Hola estoy usando la libreria jquery, tambien el plugin accordion, pero tengo un problemilla, quiero q cuando cambie pagina se quede abierto el bloque, habe si me pueden ayudar, recien empeze a utilizar esta famosa libreria.
Gracias de antemano
@andev: pregunta en la lista de jQuery en español, tendrás más audiencia.
Estoy empezando a usar jquery y me encanta, curiosamente la version CS3 de Dreamweaver trae una serie de SPYS, con efectos y tal que se parecen a jquery, pero esta libreria es mas facil de utilizar, apartir de ahora pienso usarla para mejorara mis paginas.
Que tal muchas gracias por el tutor me ahorro mucho trabajo, pero tengo un problemita en el caso de tablas con demasiadas filas como 80 al final de las filas me salen en blanco y no intercaladas pero en el caso de tablas de 50 filas si se bien todas intercaladas quisiera saber cual puede ser mi problema con aquellas filas que no hacen efecto el intercalado de color.
Esto me pasa mas en IE 6 y IE 7, mando el link donde se muestra el problema: http://plusdeportiva.com/copabrugueraperu/fichas-va-16.php, lo testee en otras pc e igual pasa.
Como ven en IE casi al final 20 filas ya no intercalan y las deja todoas del mismo color, cual podria ser el problema, en el caso de tablas mas cortas si funciona normal.
Muchas gracias de antemano.
Buen tutor gracias, tengo una tabla de 80 filas mas o menos pero a las ultimas 20 no hace efecto el intercalado de color, a que se debe , gracias de antemano.
Mando el link:
http://plusdeportiva.com/copabrugueraperu/fichas-va-16.php
angel: prueba a eliminar la llamada a pasarela.js. Dentro de este script hay algún que otro document.write que puede hacer que ready se dispare antes de tiempo.
Y luego, cuéntanos.
hummmm…volao volao esto del jquery!!!! :P
Hola recien estoy viendo el tutorial de JQuery, pero para seguir avanzando quisiera algunas respuestas como: los efectos y animaciones que puede hacerce con JQuery no salen bien en mi “localhost” al utilizar el firefox es mas probable que funcione, pero en IE7 las animaciones y efectos se realizan mal, la pregunta seria de alguna manera estos efectos se ejecutan mal por tener varias tablas en mi site “tablas anidadas”?
Porque no algun tutorial sobre los efectos?
gracias.
[…] Introduccion a jQuery (en Dizque) […]