Visitez mon nouveau site web » mongo.ca
Aucun message portant le libellé Librairie. Afficher tous les messages
Aucun message portant le libellé Librairie. Afficher tous les messages

jeudi 17 décembre 2009

Créer un nouveau sélecteur jQuery pour rechercher dans le contenu HTML avec Javascript

Voici comment créer un nouveau sélecteur(selector) dans jQuery qui vous permettra de sélectionner des éléments qui contiennent le texte recherché. I s'agit d'un sélecteur semblable à :contains() mais il enlève les accents et ne tient pas compte de la casse.



//Premièrement on ajoute une fonction à l'objet String pour pouvoir enlever les accents

String.prototype.noaccent = function() {
return this.replace(/[àâä]/gi,"a").replace(/[éèêë]/gi,"e").replace(/[îï]/gi,"i").replace(/[ôö]/gi,"o").replace(/[ùûü]/gi,"u");
};


//Ensuite on ajoute notre nouveau sélecteur :search() à l'objet jQuery
jQuery.extend(jQuery.expr[':'], {

'search' : function(a,i,m) {
var content = ((a.textContent || a.innerText || '') +'').noaccent();
var words = m[3].noaccent().split(" ");
for(var j = 0; j < words.length; j++) {
if(content.toLowerCase().indexOf( words[j].toLowerCase() ) >= 0) {
return true;
}
}
return false;
}

});


Voilà c'est fait! Vous pouvez maintenant l'utiliser de la façon suivante :


//Cet exemple ajoute la classe "found" à tous les éléments li qui contiennent le texte montreal, montréal, Montreal ou Montréal

$("ul li:search('montreal')").addClass("found");




Un autre exemple complet avec le HTML qui permet d'afficher seulement les éléments qui contienne le texte saisi dans un textBox.

Le HTML :





  • Abercorn

  • Acton Vale

  • Adstock

  • Aguanish

  • Akulivik

  • Akwesasne

  • Albanel

  • Albertville

  • Alleyn-et-Cawood

  • Alma

  • Amherst

  • Amos

  • Amqui

  • L'Ancienne-Lorette

  • Ange-Gardien

  • L'Ange-Gardien (La Côte-de-Beaupré)

  • L'Ange-Gardien (Les Collines-de-l'Outaouais)

  • Angliers

  • L'Anse-Saint-Jean

  • Armagh

  • Arundel

  • Asbestos

  • L'Ascension





Et maintenant le javascript qui fait fonctionner le tout :



$(function() {

//On ajoute un événement au TextBox lorsqu'une touche est pressé

$("input.query").keyup(function() {

//On stocke le texte saisi dans une variable
var query = jQuery.trim($(this).val());

if(!query.length) {
$("ul.list li").show(); // S'il n'y a pas de texte saisie (ou seulement des espaces) on affiche tous les éléments li
} else {

//Sinon on fait une boucle qui passe à travers tous les éléments li
$("ul.list li").each(function() {

if( $(this).is(":search('"+query+"')") ) {
$(this).show(); //Si l'élément contient le texte on l'affiche
} else {
$(this).hide(); //On cache tous les autres
}

});

}

});

});

dimanche 6 décembre 2009

Architecture Javascript pour entreprise avec Google Closure

Dernièrement j'ai fait beaucoup de recherche sur la façon de structurer son code javascript dans de gros projets web. Il n'y a pas vraiment d'informations sur le sujet car l'utilisation poussée de javascript est relativement récente. Mais comment doit-on organiser son code lorsqu'on bâtit une application web qui utilise AJAX et Javascript de façon intensive comme le fait Facebook ou GMail? Google offre depuis peu une solution à ce problème, Google Closure.

Ce projet vient en 3 morceaux:

Closure Compiler : Un compilateur javascript qui rassemble votre code en un seul fichier et supprime les commentaires, les espaces ainsi que les fonctions/variables inutilisées. Vous pouvez compiler votre code à l'aide de l'outil en ligne.

Closure Library : Une librairie javascript qui offre une grande quantité de fonctions utiles mais aussi de modules pour votre interface utilisateur (Bouton, Rich text editor, Tree view, etc...). Cette libraire est particulièrement utile car elle encourage les bonnes pratiques de programmation pour garantir une structure intelligente et la possibilité de réutiliser vos modules. Cette librairie est utilisée dans de gros projets web comme Google GMail.

Closure Templates : Un système de templates pour Javascript qui utilise un langage simple et efficace.

Je n'ai pas encore utilisé activement Google Closure mais je prévoit en faire l'essai pour la nouvelle version de Écoutez.ca .

À suivre...
Visitez mon nouveau site web » mongo.ca