J'adore travailler avec la librairie JavaScript prototype, mais force est de constater que le framework semble à l'abandon. La dernière version (1.6) remonte à novembre 2007 et mis à part quelques corrections mineures effectuées lors du release 1.6.0.3 (septembre 2008), il n'y a plus aucune trace d'innovations.
C'est pourquoi j'ai décidé de me tourner vers jQuery, une librairie plus légère et performante que son prédécesseur. Des effets visuels sont aussi disponibles, sans faire appel à des librairies externes comme le fait prototype avec scriptaculous.
À titre de référence, voici une liste rapide de certaines équivalences entre les deux librairies :
1. Initialisation au chargement de la page
// prototype2. Attacher une fonction à un événement
Event.observe(window, 'load', onLoadFunction );
// ou
document.observe('dom:loaded', onLoadFunction );
// jQuery
$(document).ready( onLoadFunction );
// prototypejQuery possède plusieurs événements, dont blur, change, click, dblclick, focus, keydown, keypress, load, submit, unload...
Event.observe('buttonId', 'click',
function() {
// implement...
}
);
// jQuery
$('#buttonId').click(
function() {
// implement...
}
);
3. Cacher / Montrer un élément
// prototype4. Mettre à jour le contenu HTML
$('divId').show();
$('divId').hide();
// jQuery
$('#divId').show();
$('#divId').hide();
// prototype5. Effets visuels
$('divId').update('Lorem ipsum dolor sit amet...');
// jQuery
$('#divId').html('consectetur adipiscing elit');
// prototype, à l'aide de script.aculo.us6. Avorter un événement
Effect.SlideUp('divId');
// jQuery
$('#divId').slideUp("slow");
// prototype7. Ajouter une classe CSS
Event.stop(e)
// jQuery
e.preventDefault();
// prototypeChaînabilité
$('a').addClassName('link');
// jQuery
$('a').addClass('link');
Toutes les fonctions jQuery ont aussi l'avantage de toujours retourner un objet jQuery, donc on peut enchaîner les appels sans problème :
$('#links').find('a.external').addClass('fooclass');Utiliser jQuery en même temps que prototype
Vous voulez utiliser jQuery simultanément à une autre librairie JavaScript ? Il suffit d'activer le mode sans conflits :
jQuery.noConflict();Et finalement, tout comme prototype, jQuery peut aussi construire des requêtes AJAX. Mais j'en ferai le sujet d'une autre chronique prochainement.
jQuery('#divName').hide();
ou
// créer une référence dans une variable
$j = jQuery.noConflict();
$j('#divName').hide();