Création d’un plugin pour jQuery (3/5)
Catégorie : Technologie ● 13 Commentaires ● Par acti le 19/01/2009
2ème partie : Comment est structuré un plugin ?
A quoi sert un plugin jQuery ?
Un plugin jQuery permet d’ajouter des fonctionnalités sur le DOM que le framework ne permet pas actuellement. Par exemple si vous souhaitez surligner un élément quelconque du DOM, vous aimeriez bien utilisé une fonction du style jQuery('p').hilight();
Ce billet vous permet de comprendre comment faire un plugin pour faire vos propres fonctionnalitées
Squelette
Un plugin jQuery est pratiquement structuré de la même manière. En effet il existe différentes manières d’instancier la fonction qui étend l’objet. jQuery(function($){}); ou (function($){})(jQuery);. La seconde solution étant la plus utilisée.
La suite de cette article est une adaptation d’un tutoriel que vous trouverez ici
Je vais donc vous expliquer comment créer un plugin pour la fonctionnalité hilight()
Tout d’abord : la définition de la fonction
// Definition du plugin
$.fn.hilight = function() {
// on mettra le code du plugin ici
};
L’utilisation du « $ » ici est autorisé nous verrons pourquoi par la suite.
Nous allons ajouter la possibilité de gérer des options pour notre fonction.
// Definition du plugin
$.fn.hilight = function(options) {
var defaults = {
foreground: 'red',
background: 'yellow'
};
// la fonction extend() permet d'ajouter la gestion des options par défaut.
var opts = $.extend(defaults, options);
// La suite du code se placera ici
};
Nous avons donc défini deux options par défaut : « foreground » qui permettra de gérer la couleur du texte, et « background » pour la couleur du fond. De plus il nous est possible de modifier les couleurs en les précisant en argument de la fonction. Par exemple : jQuery('#maDiv').hilight({
foreground: 'blue'
});
Ainsi le texte sera bleu.
Les variables par défaut que nous avons définies ne sont accessibles seulement par la fonction $.fn.hilight().
Nous allons maintenant rendre public ce tableau afin d’accéder rapidement aux variables par défaut pour les modifier avec un minimum de code.
Créons d’abord la variable du tableau :
$fn.hilight.defaults = {
foreground: 'red',
background: 'yellow'
};
Maintenant nous allons modifier la gestion des variables par défaut dans la fonction $fn.hilight()
$.fn.hilight = function(options) {
var opts = $.extend({}, $.fn.hilight.defaluts, options);
};
Grâce à cette méthode, nous pouvons directement modifier les variables par défaut avec $.fn.hilight.defaults.foreground = 'blue';.
Nous allons maintenant passer au développement de la fonction pour agir sur le texte afin de surligner ce que l’on souhaite.
Pour cela, nous allons utiliser la fonction $().css();.
Tout d’abord, il est important de noter l’utilisation de la fonction each(); qui prend en paramètre une fonction. Cette fonction permet d’appliquer notre fonction principale (hilight()) sur notre choix.
Ainsi on obtient le code suivant :
return this.each(function() {
var $this = $(this);
var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
$this.css({
backgroundColor: o.background,
color: o.foreground
});
Passons maintenant à la normalisation en plugin jQuery.
Nous allons mettre le code défini précédemment dans la function (function ($){})(jQuery);.
Ce qui nous donne :
(function ($){
$.fn.hilight = function(options) {
var opts = $.extend({}, $.fn.hilight.defaluts, options);
return this.each(function() {
var $this = $(this);
var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
$this.css({
backgroundColor: o.background,
color: o.foreground
});
};
$fn.hilight.defaults = {
foreground: 'red',
background: 'yellow'
};
})(jQuery);
Améliorations
La principale amélioration que l’on peut apporter est le débogage.
On peut ajouter une fonction dit privée à notre plugin : debug();.
function debug($obj) { Ainsi on peut utiliser au cours du plugin de cette manière :
if (window.console && window.console.log)
window.console.log('hilight selection count: ' + $obj.size());
};
(function($) {
$.fn.hilight = function(options) {
debug(this);
var opts = $.extend({}, $.fn.hilight.defaults, options);
// iterate and reformat each matched element
return this.each(function() {
$this = $(this);
// build element specific options
var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
// update element styles
$this.css({
backgroundColor: o.background,
color: o.foreground
});
});
};
//
// private function for debugging
//
function debug($obj) {
if (window.console && window.console.log)
window.console.log('hilight selection count: ' + $obj.size());
};
//
// plugin defaults
//
$.fn.hilight.defaults = {
foreground: 'red',
background: 'yellow'
};
})(jQuery);
Dans le prochain article, j’expliquerai le développement d’un plugin Weather qui affiche la météo en temps réel pour une ville donnée.
C'était vraiment très intéressant ! Je partage cet article :










![acti represent ! [Lyon World Web Capital] acti represent ! [Lyon World Web Capital]](http://blog.acti.fr/wp-content/uploads/2012/04/acti-conference-mondiale-web-62x62.jpg)









lrbabe :
Pourquoi laisser du code de debug dans le plugin ? Ça alourdit le fichier et ça n’a aucun intérêt pour l’utilisateur final, ni même pour les éventuels futurs développeurs qui auront probablement besoin de débugger une autre partie du code.
Pour s’assurer que le code marche comme prévu vous devriez plutôt regarder du côté des tests unitaires.
le 02/02/2009 à 13:27
Sylvain Gougouzian :
Bonsoir,
La partie debug est intéressante lors du développement du plugin.
Je suis d’accord avec vous pour l’enlever lors de la release de celui-ci.
le 12/02/2009 à 00:15
Teresa :
J’ai aimé votre explication claire et détaillée du plugin! Plugin simple fait de moi, mais c’est ma création!
le 26/02/2009 à 10:17
seb :
Ce post semble pas mal similaire à celui-ci publié il y a plus d’un an : http://www.learningjquery.com/20...
le 23/05/2009 à 20:18
Sylvain Gougouzian :
En effet seb, l’url est d’ailleurs précisée dans l’introduction de l’article.
le 28/05/2009 à 16:30
Juegos de mario :
Merci pour le tutoriel !
le 16/01/2010 à 18:27
toto :
Bonjour ;
Pouvez-vous m’expliquer cette notation :
(function($){})(jQuery);
Comment la function et passée à jquery ?
Je comprends celle-ci qui est logique :
jQuery(function($){});
le 27/01/2010 à 09:26
toto :
Ok: thanks to google:
Clarifions rapidement la syntaxe utilisée ici :
* « function() {…} » permet de définir une fonction anonyme.
* Puisque l’on souhaite que cette fonction soit exécutée immédiatement, on ajoute « () » à la fin : « function() {…}(); ».
* La grammaire de JavaScript ne permet cependant pas cette écriture, il faut donc encadrer la fonction anonyme avec des parenthèses : « (function() {…})(); ».
Ici, on passe donc l’object Jquery en tant que paramètre d’une fonction annonyme qui est exécutée automatiquement ce qui donne:
(function($){})(jQuery);
Sources:
http://www.alsacreations.com/art...
le 27/01/2010 à 09:45
freeman :
Bonjour :
J’aimerais bien que vous expliquer cette ecriture svp :
var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
le 30/01/2010 à 00:29
Web codeur :
Bonjour,
Super sympa de petit tutoriel et bien expliqué.
Bonne continuation pour le suite.
Bien cordialement.
le 04/03/2010 à 19:24
Fff :
Très bon tutoriel, je vais vite voir la suite car c’est très pédagogique, j’arrive à m’y retrouver aisément.
le 23/03/2010 à 12:37
Jesper :
je vous remercie beaucoup pour l’information
le 23/03/2010 à 16:08
solar photovoltaics quote :
J’ai aimé votre explication claire et détaillée du plugin! Plugin simple fait de moi, mais c’est ma création!
le 03/09/2010 à 14:10