0482 Javascript Et Jquery PDF
0482 Javascript Et Jquery PDF
Nicolas Bauwens
Conseiller pédagogique - Formateur
[email protected]
1
Contenu
Introduction ............................................................................................................................................ 5
Le B-A-BA d'Internet ........................................................................................................................... 5
Qu'est-ce que JavaScript & jQuery ? ................................................................................................... 6
Définition ........................................................................................................................................ 6
Historique........................................................................................................................................ 6
Outils ............................................................................................................................................... 6
Quelques mots sur jQuery .............................................................................................................. 7
Inclure du JavaScript dans une page HTML ............................................................................................ 7
Les éléments du langage ......................................................................................................................... 8
Variables ............................................................................................................................................. 8
Numérique (Number) ...................................................................................................................... 9
Chaîne de caractère (String) ........................................................................................................... 9
Booléens (Boolean) ....................................................................................................................... 10
null et undefined ........................................................................................................................... 10
Tests et conditions ............................................................................................................................ 12
Les opérateurs de comparaison .................................................................................................... 12
Les opérateurs logiques ................................................................................................................ 13
Types de tests ............................................................................................................................... 14
Tester null et undefined ................................................................................................................ 15
Les boucles ........................................................................................................................................ 17
Li e tatio ........................................................................................................................... 19
Le type array ................................................................................................................................. 19
Types de boucles ........................................................................................................................... 20
Les fonctions ..................................................................................................................................... 22
Déclaration .................................................................................................................................... 22
Appel ............................................................................................................................................. 22
Portée des variables ...................................................................................................................... 23
Les fonctions anonymes................................................................................................................ 23
Les avantages de jQuery ....................................................................................................................... 25
Inclure jQuery dans son projet ............................................................................................................. 25
En local .......................................................................................................................................... 25
Via CDN ......................................................................................................................................... 25
Le DOM ................................................................................................................................................. 26
2
Comprendre le Document Objet Model ........................................................................................... 26
Introduction aux objets ................................................................................................................. 28
Les objets window et document ................................................................................................... 29
Lecture et modification du DOM ...................................................................................................... 30
En JavaScript pur ........................................................................................................................... 30
En jQuery....................................................................................................................................... 32
Les événements .................................................................................................................................... 40
Le o ept d e e t .................................................................................................................. 40
Associer un événement à un élément .............................................................................................. 41
En JavaScript ................................................................................................................................. 41
Avec jQuery ................................................................................................................................... 42
Atte d e le ha ge e t de l HTML .................................................................................................. 43
L o jet Event ..................................................................................................................................... 44
Stoppe le o po te e t o al d u e e t ........................................................................ 44
Plus loin avec jQuery ............................................................................................................................. 45
Les objets littéraux ............................................................................................................................ 45
Déclarer et utiliser un objet littéral .............................................................................................. 45
Aut e utilisatio d u o jet litt al : le tableau associatif ............................................................ 46
La boucle for in .............................................................................................................................. 47
Les effets visuels ............................................................................................................................... 47
Apparaître et disparaître............................................................................................................... 47
Les animations .............................................................................................................................. 48
Les sélecteurs avancés ...................................................................................................................... 49
Les filtres ........................................................................................................................................... 50
Parcourir le DOM .............................................................................................................................. 51
Les méthodes utilitaires .................................................................................................................... 52
Les plug-ins............................................................................................................................................ 52
jQuery UI ........................................................................................................................................... 52
Autres plug-ins .................................................................................................................................. 52
Les formulaires et la validation ............................................................................................................. 53
Interagir avec un formulaire ............................................................................................................. 53
Sélectionner des éléments ............................................................................................................ 53
Lire et modifier les valeurs ............................................................................................................ 54
Les événements ............................................................................................................................ 55
3
Activer/désactiver des champs ..................................................................................................... 56
Valider un formulaire ........................................................................................................................ 57
Introduction .................................................................................................................................. 57
Configurer la validation ................................................................................................................. 57
St le les essages d e eu ......................................................................................................... 59
Requêtes AJAX avec jQuery .................................................................................................................. 59
Introduction ...................................................................................................................................... 59
Fonctionnement................................................................................................................................ 60
Méthodes jQuery .............................................................................................................................. 60
.load() ............................................................................................................................................ 60
$.get() et $.post() .......................................................................................................................... 61
$.getJSON() ................................................................................................................................... 61
$.ajax() .......................................................................................................................................... 61
Les cookies ............................................................................................................................................ 62
L o jet Date....................................................................................................................................... 63
Le debug et la gestion des erreurs ........................................................................................................ 64
Le debug ............................................................................................................................................ 64
La gestion des erreurs ....................................................................................................................... 65
La minification ....................................................................................................................................... 65
Plus d i fo mations ............................................................................................................................... 66
Sources .................................................................................................................................................. 66
4
Introduction
Le B-A-BA d'Internet
Petit rappel pour ceux qui savent, et petite explication pour ceux qui se sont toujours posé la
question « mais comment ça marche Internet » ?
Pour faire simple, quand vous tapez http://www.google.com dans votre navigateur, votre requête
est envoyée vers un serveur web, dans ce cas-ci un serveur de chez Google, qui va simplement vous
renvoyer un fichier HTML accompagné de fichiers CSS et éventuellement de JavaScript. Ce transfert
de données utilise le protocole HTTP (HyperText Transmission Protocol). Un protocole est une
spécification des règles de communication entre matériels électroniques.
Une fois la page web reçue par le navigateur, celui-ci va décoder tout ça (parsing en anglais) et vous
afficher une belle page web !
5
Qu'est-ce que JavaScript & jQuery ?
Définition
JavaScript est un langage de programmation interprété.
Un langage de programmation, c'est un langage qui permet d'écrire du code source. Le code source
quant à lui:
communique des actions à un ordinateur sous forme d'instructions (variables, tests, boucles,
etc...)
peut être compilé: le code est d'abord converti en langage binaire (0 et 1) par un
compilateur afin d'être compris par l'ordinateur
ou interprété: l'ordinateur comprend directement le code via un interpréteur. On parle
souvent du mot script pour parler de code interprété. Dans le cas du JavaScript,
l'interpréteur est inclus dans le navigateur web (SpiderMonkey pour Firefox, JScript pour IE,
V8 pour Chrome)
C'est un langage client: il est interprété par le navigateur, donc sur la machine de l'internaute.
L'inverse des langages clients sont les langages serveur: ils s'exécutent sur le serveur et renvoient de
l'HTML aux machines clientes. PHP, C#, Ja a,… so t des la gages se eu .
Comme il s'exécute sur la machine client, cela peut poser divers problèmes: lenteur de l'exécution
du script due aux performances de la machine client, problème de compatibilité avec des
navigateurs obsolètes voir la désactivation complète de JavaScript sur la machine cliente. Nous
reviendrons sur ces problématiques dans le cours.
Historique
Il ne faut pas retenir tout ça mais ça va éclaircir certains termes que vous risquez de rencontrer
quand vous travaillerez avec du JavaScript. JavaScript a été inventé par Netscape en 1995 et fut
ensuite standardisé par l'ECMA (un organisme qui met en place des standards dans le monde de
l'informatique). La version standardisée s'appelle donc ECMAScript, la version stable la plus récente
étant ECMAScript 5. Plusieurs implémentations d'ECMAScript existent à l'heure actuelle, dont JScript
(implémentation dans IE) ou ActionScript (dans Flash).
D'où quelques différences de comportement entre Mozilla et Internet Explorer, JScript permettant
de faire des choses qui ne sont pas possible par défaut avec JavaScript.
Outils
Pour écrire du JavaScript, il ne faut pas d'outils particuliers. Votre éditeur HTML fait l'affaire, aussi
bien qu'un outil comme Notepad++. Afin de nous faciliter la vie, nous utiliserons l'outil WebStorm
qui fait de l'autocompletion et offre des petites fonctionnalités sympathiques comme le debug de
code.
Vous pouvez aussi utiliser le site http://jsfiddle.net/ qui permet de tester rapidement du code
JavaScript sans devoir ouvrir un éditeur, créer un fichier, le lancer dans Firefox etc... C est très
6
pratique quand vous voulez tester du code rapidement ! Les exemples de ce cours seront dans
jsfiddle.
Enfin, outil ô combien indispensable pour débugger du JavaScript : Firebug. FireBug est une
e te sio de Fi efo et pe et d i spe te le ode HTML et les CSS ais aussi de débugger du
Ja aS ipt, oi les e u tes AJAX, et … Vous pouvez utiliser la méthode console.log() dans votre
code pour débugger, mais attention, retirez cette instruction avant de mettre le site en ligne !
De plus, jQue s o upe tout seul de la o pati ilit a e les diff e ts navigateurs, même IE 6 –
pou i fo atio I te et E plo e et e so t les pi es au he a s d u i t g ateu a ils
regorgent de spécificités propres à eux.
Sa syntaxe est claire et facilement compréhensible, le seul poi t gatif ta t u il impacte les
performances techniques car la librairie est assez lourde à charger.
C'est très chouette, mais pour jouer avec jQuery il faut quand même comprendre les bases du
JavaScript, et plus précisément sa syntaxe. Comme si vous appreniez une nouvelle langue, nous
allons voir les rudiments de grammaire et de vocabulaire du langage dans les prochains chapitres.
<script type="text/javascript">
[CODE JAVASCRIPT]
</script>
se trouver dans un fichier externe (extension .js), sous cette forme (la localisation du fichier
peut être absolue ou relative, ici il se trouve dans le fichier function.js)
Prenez l'habitude de mettre vos scripts dans des fichiers séparés, par soucis de performances (le
fichier sera mis en cache par le navigateur) et pour rendre le script inobstrusive (nous reviendrons
sur cette notion à la fin du cours)
Il est souvent mentionné que le tag <script> doit se trouver dans le tag <head>, cependant une page
Web est lue par le navigateur de façon linéaire, c'est-à-dire qu'il lit d'abord le <head>, puis les
éléments de <body> les uns à la suite des autres. Si vous appelez un fichier JavaScript dès le début
7
du chargement de la page, le navigateur va donc charger ce fichier, et si ce dernier est volumineux,
le chargement de la page s'en trouvera ralenti. C'est normal puisque le navigateur va charger le
fichier avant de commencer à afficher le contenu de la page.
Pour pallier ce problème, il est conseillé de placer les tags <script> juste avant la fermeture du tag
<body>.
Variables
Vous vous souvenez de votre cours de math ? On y parlait déjà de variables, par exemple dans le
calcul suivant, on trouve 3 variables: x, a et b.
x = (a + b)/4
C'est le même principe en informatique, une variable permet de stocker une valeur, une
information, qu'elle soit numérique, sous forme de texte, ou autre.
Afin d'utiliser une variable il faut d'abord la déclarer. Il s'agit tout simplement de lui réserver un
espace de stockage en mémoire, rien de plus. Une fois la variable déclarée, vous pouvez commencer
à y stocker des données sans problème.
var myVariable;
Notez la p se e d u poi t-virgule. Après chaque instruction, il faut mettre un point- i gule. C est
comme ça
le JavaScript est sensible à la casse ou case-sensitive, ce qui veut dire que les majuscules
et minuscules comptent.
var myVariable;
var MyVariable;
On peut nommer une variable comme on le souhaite, cependant il existe certains noms réservés
qu'on ne peut pas utiliser, sinon le code ne marchera pas. La liste complète des mots réservés
Une fois une variable déclarée on peut l'initialiser, c'est-à-dire lui assigner une valeur, par exemple
8
var myVariable;
myVariable = 2;
Contrairement à de nombreux langages, le JavaScript est un langage typé dynamiquement. Cela veut
dire, généralement, que toute déclaration de variable se fait avec le mot-clé var sans distinction du
contenu, tandis que dans d'autres langages, comme le Java, il est nécessaire de préciser quel type de
contenu la variable va devoir contenir (un nombre, du texte, etc...)
Cela veut aussi dire que l'on peut y mettre du texte en premier lieu puis l'effacer et y mettre un
nombre quel qu'il soit, et ce, sans contraintes. Il faut donc être très attentif !
Numérique (Number)
Ce t pe ep se te tout o e, u'il soit e tie , gatif, d i al,…
Pour assigner un type numérique à une variable, il vous suffit juste d'écrire le nombre seul :
var number = 5;
Attention, dans le cas d'un nombre décimal, il faut utiliser le . et non la virgule, par exemple:
Quelle est l'utilité ? De pouvoir faire des calculs par exemple ! Et à cette fin, vous pouvez utiliser les
opérateurs arithmétiques que vous connaissez tous comme +, -, /, *.
Mais également, moins connu, l'opérateur %, qui permet de calculer le modulo (le reste de la
division entière). A quoi sert le modulo ? A vérifier si un nombre est pair par exemple, ou multiple
d'un chiffre.
9
Il est important de préciser que si vous écrivez var myVariable = '2'; alors le type de cette
variable est une chaîne de caractères et non pas un type numérique.
Une autre précision importante, si vous utilisez les apostrophes pour « encadrer » votre texte et que
vous souhaitez utiliser des apostrophes dans ce même texte, il vous faudra alors « échapper » vos
apostrophes de cette façon :
Pourquoi ? Car si vous n'échappez pas votre apostrophe, le JavaScript croira que votre texte s'arrête
à l'apostrophe contenue dans le mot « c'est ». Du coup, une erreur sera générée et la suite de votre
script ne s'exécutera pas.
À noter que ce problème est identique pour les guillemets. Une autre possibilité est d'encadrer le
texte avec des guillemets quand vous utilisez des apostrophes dedans:
Booléens (Boolean)
Ce type permet simplement de stocker "vrai" ou "faux" :
Sachez qu'il est également possible de "convertir" une variable d'un type à l'autre, par exemple de
transformer une string qui contient "42" en une variable numérique qui contient le nombre 42 et
inversement.
null et undefined
Il a i e u o doi e di e u u e a ia le est d la e ais ne contient rien. Dans ce cas, on utilisera
null.
Si une variable n'a pas été initialisée, elle sera undefined. Evidemment, si vous exécuter une action
avec une variable undefined, le code va planter.
10
Exemples de undefined et de null.
Ce test appelle console.log(), pensez ) activer Firebug ;-)
http://jsfiddle.net/xa4zs/
11
Tests et conditions
Les tests permettent d'exécuter une action (ou de ne pas l'exécuter !) en fonction de certains
critères, ou conditions. Les tests s'appliquent toujours au type booléen, c'est-à-dire à "vrai" ou
"faux". Un test est toujours du type "Si la condition est vraie, alors j'exécute ceci, sinon j'exécute
cela"
Par exemple, "si l'utilisateur est belge, alors afficher un message à l'écran" ou "si l'utilisateur choisit
le thème 'vert' alors charger la CSS 'vert.css'" ou encore "si la résolution de l'écran est minimum de
640*480, alors charger les scripts lightbox"
Exemples :
http://jsfiddle.net/9hNp4/
De quoi sont constituées les conditions ? De valeurs à tester et de deux types d'opérateurs : de
logique et de comparaison. Pour être plus clair: une condition sera vraie ou fausse en fonction du
résultat d'une comparaison et/ou d'un test logique.
Opérateur Signification
== égal à
!= différent de
=== contenu et type égal à
!== contenu ou type différent de
> supérieur à
>= supérieur ou égal à
< inférieur à
<= inférieur ou égal à
12
Le résultat d'une comparaison renvoie vrai ou faux, en bref, une valeur de type booléen ;-)
Exemple:
Lorsque qu'on teste plusieurs valeurs, il faut avoir en tête les résultats possibles, voici la table de
vérité des opérateurs "ET" et "OU". Les résultats d'un test logique est aussi un booléen
Du coup, il est possible de combiner au sein d'un même test, des opérateurs de comparaison et des
opérateurs logiques, comme dans l'exemple ci-dessous
13
Types de tests
if-else
Nous l'avons déjà vue dans les exemples précédents, retenez-le bien car c'est le type de test le plus
rencontré. Il permet d'exécuter une action si une condition est vraie, et une autre action si elle est
fausse.
if (test) {
action;
}
else {
autreAction;
}
Il est possible d'enchaîner les tests if-else, par exemple pour dire, "si le visiteur est Belge, alors
afficher un message vert, sinon si le visiteur est Français, alors afficher un message bleu, sinon
afficher un message jaune"
if(test) {
action;
}
else if (test2) {
autreAction;
}
else {
actionParDéfaut;
}
switch
C'est une variante du if-else. Si on doit tester plusieurs pays avec des if-else, ça risque de vite devenir
ennuyeux. Dans le cas où il faut faire beaucoup de tests sur une même donnée (ici, le code pays du
visiteur), alors il est préférable d'utiliser un switch car il permet de mieux s'y retrouver. Cette
instruction effectue une comparaison par rapport à la valeur et au type.
Sa syntaxe :
switch(variable) {
case valeurPossible1 :
action1;
break ;
case valeurPossible2 :
action2;
14
break ;
case valeurPossible3 :
action3;
break ;
default :
actionParDéfaut;
break ;
}
default permet lui de définir une action par défaut si aucune des valeurs des case ne correspond.
http://jsfiddle.net/zrUtK
ternaire
Une autre variante du if-else. Si vous voulez épargner vos doigts lors de l'écriture de if-else, vous
pouvez passer par une condition ternaire. C'est la même chose en plus court, mais en parfois moins
lisible... Préférez le if-else, mais sachez reconnaître celui-ci.
Syntaxe:
ou
résultat = (test) ? valeur si test est vrai : valeur si test est faux
http://jsfiddle.net/Xns2Z/
15
var notInit;
if(notInit == undefined)
{
alert("variable pas initialisée")
}
Du coup, pour tester null et undefined mais aussi par exemple une string vide, il faudrait combiner
plusieurs conditions. Il existe une notation beaucoup plus concise !
Vous savez que les variables peuvent être de plusieurs types : les nombres, les chaînes de caractères,
etc. En fait le type d'une variable (quel qu'il soit) peut être converti en booléen même si à la base on
possède un nombre ou une chaîne de caractères.
Quels contenus seront « faux » ? Un nombre qui vaut zéro, une string vide, null ou undefined. Tous
les autres cas seront « vrais ». Du coup, on peut écrire quelque chose comme ça, qui est nettement
plus rapide :
U e aut e petite su tilit du Ja aS ipt ous est offe te pa l op ateu OU. Celui-ci, en plus de sa
fonction principale, permet de renvoyer la première variable possédant une valeur évaluée à true.
alert(conditionTest1 || conditionTest2);
//affichera 'Une chaîne de caractères'
16
var txt = div.textContent || div.innerText || '';
http://jsfiddle.net/ZZbh5
Les boucles
Quand on parle de répéter un album en boucle, ça vous évoque quoi ? Le fait de répéter plusieurs
fois, auto ati ue e t, les ha so s de l al u . C est le e p i ipe e programmation. Les
ou les pe ette t de p te u e a tio plusieu s fois ta t u u e o ditio est espe t e, ou
jus u à e u u e o ditio soit espe t e.
Et oui, nous allons, comme pour les tests, utiliser les conditions dans les boucles. Il faut, bien
e te du, u u o e t la o ditio de ie e fausse, si o o g e u e ou le i fi ie… ous
vous rappelez des sites qui ouvraient milles fenêtres popup ? C est u eau as d utilisatio d u e
ou le i fi ie, u e ou le ui e s a te ja ais ! Haaaaaaaa !
Une boucle peut être exprimée de cette façon « Tant que la condition est vraie, exécuter ces
actions » ou bien de cette façon « Pour toutes les données que voici, exécuter ces actions ».
17
Une boucle fonctionne de cette manière :
I itialisatio
fausse
Co ditio
aie
A tio s
Mise à jou
18
L’i ré e tatio
Avant de plonger dans les types de boucles, arrêtons- ous u i sta t a est l e d oit id al pou
pa le de l i e tatio . Qu est- e ue l i e tatio ? C est le fait d ajouter une unité à un
nombre au moyen d'une syntaxe courte. À l'inverse, la décrémentation permet de soustraire une
unité.
Par exemple, pour incrémenter une variable numérique on peut le faire de cette manière
var incrementVariable = 0;
incrementVariable = incrementVariable + 1;
var incrementVariable = 0;
incrementVariable++;
Vous allez o p e d e l i t t de l i e tatio da s les e e ples des boucles qui utilisent des
Array.
Le type array
Bo , les ou les utilise t t s guli e e t u aut e t pe de do es u o appelle array, ou
tableaux en Français. Pour ne pas confondre avec les tables HTML, on va garder le terme array!
Index 0 1 2 3 4
Item « HTML 5 » « CSS 3 » « Photoshop » « JavaScript » « jQuery »
19
skills[ ] = PHP ; //Modifier
console.log(skills[1]); //Accéder
Types de boucles
while
C est elle ui olle le plus au flu d it i-dessus. Voici sa syntaxe :
while (condition) {
action1;
action2;
}
Exemple :
Ta t u o attei t pas u div défini d u e olle tio de div, on rajoute du code HTML
aux div parcourus
http://jsfiddle.net/g8XJx/
Une existe une variante de la boucle while, la boucle do while. Elle ressemble très fortement à la
boucle while, sauf que dans ce cas la boucle est toujours exécutée au moins une fois. Dans le cas
d'une boucle while, si la condition n'est pas valide, la boucle n'est pas exécutée. Avec do while, la
boucle est exécutée une première fois, puis la condition est testée pour savoir si la boucle doit
continuer.
do {
action;
} while (condition);
for
La boucle que vous allez utiliser le plus souvent est la boucle for. Elle fonctionne de la même
a i e u u while ais l i itialisatio , la o ditio et l i e tatio se d la e t su u e seule
ligne, comme ceci :
20
3. Enfin, dans le bloc d'incrémentation, on indique que la variable sera incrémentée à chaque
passage de la boucle, afin de la faire arriver à la aleu d a t
Priorité d'exécution
Les trois blocs qui constituent la boucle for ne sont pas exécutés en même temps :
Initialisation : juste avant que la boucle ne démarre. C'est comme si les instructions
d'initialisation avaient été écrites juste avant la boucle
Condition : avant chaque passage de boucle
Incrémentation : après chaque passage de boucle. Cela veut dire que, si vous faites un break
dans une boucle for, le passage dans la boucle lors du break ne sera pas comptabilisé.
Le fonctionnement même du JavaScript fait que la boucle for est nécessaire dans la majorité des cas
comme la manipulation des array. Nous verrons aussi un peu plus tard une variante de la boucle for,
appelée for in.
Exemples :
http://jsfiddle.net/WZ6ac/
http://jsfiddle.net/EvBmX/
21
Les fonctions
Que feriez-vous si vous devez exécuter plusieurs fois le même code ou un code similaire mais où les
variables utilisées sont différentes ? Le copier- olle est pas u e supe o e id e, est e u eu ,
ça p o o ue de la edo da e, ça alou dit le ode et le e d oi s lisi le et ça is ue d i t odui e
des e eu s… D où l i t t d utilise des fo tio s !
Déclaration
Vous en avez vu dans les exemples précédents, une fonction se déclare comme ceci :
Un nom
U e liste d arguments. Ils sont mis entre crochets ci-dessus car ils sont facultatifs. Ils
permettent de donner des paramètres, des données en entrée à la fonction. Ils ne sont
utilisables que dans le corps de la fonction.
Un corps ; du code quoi
Eventuellement une valeur de retour. La fo tio peut se o te te de e ute ue du
code, mais elle peut également retourner, renvoyer un résultat ! Voilà qui est pratique
La fo tio s appelle hasClass, elle a 2 arguments, element et cls et elle retourne un résultat,
booléen dans ce cas-ci.
Appel
U e fo tio s appelle pa so o , et si elle atte d des a gu e ts, il faud a gale e t lui e o e
lo s de l appel à la fo tio .
22
var allSpans = document.querySelectorAll(".span3");
var result = hasClass(allSpans[0], "alert-pink")
Une fonction doit toujours être déclarée avant de pouvoir être appelée !
Une fois sorti du scope de la fo tio , il est plus possi le d a de à ses a iables locales, si vous
faites ça, votre code va bien planter
Si les a ia les so t p op es à la fo tio , ieu aut les e o e a ia les lo ales, est plus
propre car il faut user des variables globales avec modération !
Créer des span sous forme de « tags » à pa ti d u array, mais cette fois avec une
fo tio et utilisatio d u e a ia le lo ale
http://jsfiddle.net/cLLS2/
E fait les fo tio s a o es so t t s p ati ues pou effe tue du ode lo s d u e a tio , d u
événement, sans devoi d la e u e fo tio ui e se i ait u à u e seule hose ie p ise.
Nous verrons cela plus en détails dans le chapitre sur le DOM et les événements.
23
\") repeat scroll 0% 0% transparent";
};
http://jsfiddle.net/fAUwy/
24
Les avantages de jQuery
Vous avez pu vous rendre compte a e les udi e ts du la gage ue ous e o s d e plo e que le
Ja aS ipt, est pa fois u peu p ise de t te ! Faire de petites choses dema de d i e pas al de
lignes de code et puis il faut toujours tenir compte de la compatibilité entre les différents
navigateurs. Bref, pas toujours simple.
C est su es poi ts ue jQue a ous t e t s p ieu . So sloga est « write less, do more » et
de fait, ette li ai ie a l a a tage d a oi u e s ta e ou te et fa ile à o p e d e. Elle pe et de
faire en 1 ligne ce qui demanderait des centaines de lignes de code en JavaScript pur. De plus, elle
s o upe pou ous de la o pati ilit e t e les a igateu s, est pas eau la ie ?
Un autre avantage non négligeable ce sont les plug-ins ! Il existe une flopée de ces « mini-librairies »
qui se basent sur jQuery, programmées par des gens comme vous et moi et qui ont un but bien
précis : un petit système de rating, la gestion du scroll, faire des parallax, fa ilite l utilisatio de
Google Maps, et …
jQuery utilise tout simplement du JavaScript pur et dur, celui que nous avons vu précédemment, il
a do ie de « magique » mais une fois que vous y aurez goûté, vous aurez du mal à vous en
passer ! Et tout ça gratuitement
Via CDN
U e aut e possi ilit est d utilise u Content Delivery Network, ou CDN. E g os, est u site e
qui héberge une version de jQuery et vous pouvez directement pointer vers ce site pour inclure
jQuery dans vos pages.
Il en existe plusieurs : chez Microsoft, chez Google, et même chez jQuery. Il existe de multiples
avantages :
25
Co e d aut es sites utilise t les CDNs, os visiteurs auront peut-être déjà jQuery dans le
a he de leu a igateu u u ils se o t pass s su u de es sites p de e t, ot e
navigateur de devra dès lors plus télécharger le fichier.
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-
1.9.0.min.js"></script>
<script
src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></
script>
Le DOM
<html lang="en">
<head>
<title>Le titre de ma page</title>
<meta name="description" content="youhouuu">
</head>
<body>
<div class="container">
<div class="hero-unit">
<h1>Hello, world!</h1>
<p>Texte d’introduction</p>
</div>
26
<div class="row">
<div class="span4">
<h2>Heading</h2>
<p>Donec id elit non mi porta gravida at eget metus.</p>
<p><a class="btn" href="#">Plus d’infos</a></p>
</div>
</div>
</div>
</body>
</html>
Le DOM ou Document Object Model, est u e ep se tatio du ode HTML sous fo e d arbre
d objets (appelés Nodes). C est sous ette fo e ue le HTML est « mémorisé » par le navigateur. Il
est possi le, e Ja aS ipt, de pa ou i et a e et do d a de à tous les éléments d u e page
HTML en vue de la modifier en rajoutant, modifiant ou supprimant des éléments!
Note de vocabulaire : dans un cours sur le HTML, on parlera de balises HTML (une paire
de balises en réalité : une balise ouvrante et une balise fermante). Ici, en JavaScript, on
parlera d'élément HTML, pour la simple raison que chaque paire de balises (ouvrante et
fermante) est vue comme un élément.
27
Introduction aux objets
Mais que signifie terme « objet » dans « Document Object Model »? Vous avez peut-être déjà
entendu de « langage orienté objet », comme le Java ou le C#. Et bien JavaScript lui aussi est
« orienté objet ».
C est u peu a st ait alors on va éviter de partir dans des considérations trop informatiques mais
pou fai e si ple diso s u u o jet est u e a i e de st u tu e des i fo atio s.
En fait, les types Number, String, Boolean et Array rencontrés précédemment sont des types
d o jets, appelés objets natifs.
O e o ait les o jets a ils peu e t o te i t pes d i fo atio : des propriétés et des
méthodes. U e p op i t est u e a ia le ui appa tie t à l o jet et u e thode est u e fo tio
propre à l o jet.
U o jet s i itialise ou s’i sta ie à l aide de e u o appelle u constructeur. Tout cela est fait
automatiquement pour les objets natifs. Nous en verrons plus tard.
Donc, chaque élément du DOM est un objet et possède donc des propriétés et des méthodes. Par
exemple, si on récupère un élément qui correspond à un div, on va pouvoir faire :
http://jsfiddle.net/kbAQU/
Le div a une propriété style qui elle-même a une propriété backgroundColor et padding
ui pe ette t espe ti e e t d i flue su les st les CSS background-color et padding.
Dans la majorité des exemples vus précédemment, on utilisait des objets ainsi que leurs propriétés
et méthodes.
28
balise HTML, qui peut avoir des attributs comme id ou class, peut avoir des
l e ts e fa ts, et …
Attention : le Node #text qui représente du texte simple, est un Node et pas un
Element !
De même, lorsque vous déclarez une variable dans le contexte global de votre script, cette variable
deviendra en vérité une propriété de l'objet window.
Toute variable non déclarée (donc utilisée sans jamais écrire le mot-clé var) deviendra
immédiatement une propriété de l'objet window, et ce, quel que soit l'endroit où vous
utilisez cette variable ! Ça peut être très pratique mais utilisez cette particularité en
connaissance de cause et préférez le mot-clé var pour déclarer vos variables.
http://jsfiddle.net/4v3Ed/
29
L’o jet document
L o jet document est u e p op i t de l o jet window, il correspond au tag <html>. C est et o jet
ui ep se te la page e et est ia lui ue l o a pou oi a de au l e ts HTML du DOM
pour ensuite les modifier.
Il est donc possi le, e Ja aS ipt et jQue , de odifie le DOM. C est e odifia t le DOM u o
peut par exemple afficher un tooltip quand on clique sur une image, une fenêtre modale, un
ale d ie ou des essages d e eu s lo s u o fo ulai e est pas alide. Chaque modification
consiste en :
Nous allons voir comment cela est possible en JavaScript pur et en jQuery.
En JavaScript pur
Dans ce chapitre nous allons brièvement exposer les propriétés et méthodes des objets Node et
Element ui pe ette t d a de plus e p ofo deu au DOM et de le odifie .
Nous allo s pas ous atta de dessus, les es possi ilit s e iste t e jQue et ous les e o s
dans le chapitre ad hoc. Mais cela vous donnera déjà un aperçu des possibilités offertes « de base »
par JavaScript.
Bon, ces méthodes sont quand un peu limitées pour des actions complexes, si par exemple on veut
a de à tous les td d u e ta le, o a de oi i e u ode assez o he et lou d, a e des
ou les… ais diso s ue est p ati ue et pe fo a t pou des a tio s t s si ples et i l es.
30
Sélectionner un élément (méthode récente)
Du coup, deux méthodes sont récemment venues compléter les 3 « classiques » pour accéder plus
rapidement aux éléments du DOM. Malheureusement elles ne sont pas supportées par tous les
browsers. Ce qui les rend un peu inutiles…
Elles utilise t, o e jQue d ailleu s, les sélecteurs CSS sous forme de string en paramètre.
http://jsfiddle.net/g8XJx/
Adapter la hauteur de 3 div en fonction du plus haut des div – otez l utilisatio de
getElementById() et children
http://jsfiddle.net/WZ6ac/
Modifier un élément
P op i t s et thodes de l o jet Element permettant de le modifier:
31
Créer des span sous forme de « tags » à pa ti d u array – otez l utilisatio de
createElement(), createTextNode() et appendChild()
http://jsfiddle.net/cLLS2/
On crée ici un nouvel élément <a>. Cet élément est créé, mais n'est pas inséré dans le document, il
n'est donc pas visible. La méthode document.createTextNode() permet quant à elle de créer un
Node #text. Ces thodes so t eau oup plus pe fo a tes ue la atio d l e ts e jQue ,
que nous verrons également.
Cela dit, o peut d jà t a aille su l l e t e, e lui ajouta t des attributs ou même des
e e ts ue ous e o s da s le hapit e sui a t . O peut l ajoute au DOM ia la thode
appendChild() de l o jet Node.
En jQuery
jQue est eau oup plus puissa t pou e ui est de l a s et la odifi atio du DOM. Il utilise
i te si e e t les s le teu s CSS et s o upe de la o pati ilit a e les a igateu s, e a e le
bon vieux IE6.
$ sélecteur
Le caractère $ est e u o appelle l’o jet jQuery. C est le poi t de d pa t de i po te uelle a tio
que vous allez effectuer avec jQuery. Vous verrez de temps en temps cette syntaxe :
jQuery sélecteur
Ce qui revient à la même chose que le caractère $, ais u o utilise pa fois pa sou is de
compatibilité – si une autre librairie utilise déjà le symbole $.
32
ID
Comme document.getElementById(), on peut sélectionner un élément à partir de son ID avec jQuery
//façon oldschool
var message = document.getElementById message ;
//façon jQuery
var message = $ #message ;
No de l’élé e t
Comme document.getElementsByTagName(), jQuery permet de sélectionner des éléments HTML à
partir de leur nom de tag.
//façon oldschool
var linksList = document.getElementsByTagName a ;
//façon jQuery
var linksList = $ a ;
C est ua d e plus ou t o ?
Classe
Un autre sélecteur super pratique qui permet de sélectionner un ou plusieurs éléments à partir de
leur classe CSS.
Cette façon de faire est possible avec les nouveautés du DOM document.getSelector() et
document.getSelectorAll() mais comme déjà dit, ces méthodes ne sont pas supportées par tous les
navigateurs. Autant donc passer directement par jQuery !
U e e ple d utilisatio :
//façon jQuery
var subMenus = $ .submenu ;
33
Sélecteurs CSS de base – activez la console Firebug pour voir les résultats
http://jsfiddle.net/aASEX/
Modifier un élément
Une fois votre élément s le tio , ous pou ez effe tue u e s ie d a tio à pa ti de et l e t.
Si vous ne donnez aucun texte en paramètre à la méthode, dans ce cas vous pouvez récupérer la
valeur du te te de l l e t, pou le ett e da s u e a ia le pa e e ple.
Si vous ne donnez aucun texte en paramètre à la méthode, dans ce cas vous pouvez récupérer la
valeur du inner HTML l l e t, pou le ett e da s u e a ia le pa e e ple.
http://jsfiddle.net/kmRBL/
34
Lire et modifier ses attributs
La méthode attr() permet de lire la aleu d u att i ut d u l e t. Pa e e ple, pou up e
l ad esse d u e i age da s la page, ous pou iez fai e e i
Si vous passez un 2ème attribut à la méthode attr(), ous pou ez alo s d fi i la aleu de l att i ut e
uestio . Si ous souhaitez pa e e ple odifie le he i e s l i age de l e e ple p de t :
Si vous souhaitez effacer un attribut, là il faut utiliser la méthode removeAttr(). Par exemple pour
eti e l att i ut alt de l i age :
http://jsfiddle.net/MLtMt/
35
toggleClass() ua t à elle ajoute la lasse si elle e iste pas et l e l e si elle e iste. C est p ati ue
pour des éléments qui ont un état « on/off » par exemple.
http://jsfiddle.net/zgSF8/
Vous allez surtout utiliser cette méthode pour modifier une propriété. Par exemple :
http://jsfiddle.net/fHPYs/
Supprimer un élément
Vous pouvez bien entendu effacer un ou plusieurs éléments de la page web avec remove().
Mettons que vous avez un div a e l ID « popup », qui serait une fenêtre modale, et que vous voulez
l effa e de la page :
$ #popup .remove ;
Cela marche aussi si vous spécifiez un sélecteur qui concerne plusieurs éléments – ils seront tous
effacés.
Vous pouvez également remplacer un élément par autre chose avec replaceWith(). Disons que vous
avez une img a e l ID « product101 » et vous voulez mettre du texte à la place car le produit lié a
t ajout à u pa ie d a hat.
36
$ #product 0 .replaceWith <p>Ajouté au panier</p> ;
Vous pouvez également créer un nouvel élément en utilisant la manière JavaScript pure
avec document.createElement() – cette façon de faire est plus rapide que la manière
jQuery.
37
Ta t u o attei t pas u div d fi i d u e olle tio de div, on rajoute du code HTML
aux div parcourus – on utilise jQuery et la méthode append()
http://jsfiddle.net/4XbR5/
Enchainement de méthodes
U e fo tio alit supe i t essa te de jQue est e u o appelle l e hai e e t de thodes.
En fait, toutes les méthodes que nous venons de voir peuvent être connectées, mises à la chaine
l u e de l aut e. Cela pe et de fai e plusieu s hoses e u e seule lig e de ode !
$("#tags").append(
$ "<span></span>" .addClass "orange" .text HTML
);
Génial non ? Si vous trouvez cela dur à lire, vous pouvez écrire chaque méthode à la ligne, comme
ceci :
$("#tags").append(
$("<span></span>")
.addClass("orange")
.text HTML
);
Créer des span sous forme de « tags » à pa ti d u array – on utilise jQuery avec la
atio d l e t, append() et text(), avec enchainement des méthodes
http://jsfiddle.net/GDALW/
38
Vous vous rappelez des boucles et plus précisément de la boucle for ? Elle nous permettait de
ou le su u e se le d l e ts, h ie une possibilité similaire existe un jQuery : la méthode
each().
La méthode each() peut être chainée à une sélection afin de « boucler » sur chaque élément de la
s le tio et leu appli ue la e a tio , au sei d u e fo tio a o e. Sa s ta e est elle-ci :
$ sélecteur .each(function() {
action1;
action2;
action3;
…
});
Ça fait beaucoup de ( et de { tout ça hein ? Les parenthèses et les accolades sont mises en évidence
pour plus de clarté. Commencez toujours par éc i e le lo d i st u tio sa s ode à l i t ieu puis
e plissez a e ot e ode, ous fe ez oi s d e eu s.
Cela est possible via le mot-clé this, ce mot-clé o espo d à l l e t ou a t du DOM Element). A
chaque passage de boucle, la valeur de this changera : il correspondra au premier élément au
premier passage, au deu i e l e t au deu i e, ai si de suite… Cependant this ne vous
pe ett a d a de u au thodes et p op i t s sta da d de l o jet Element, si vous voulez faire
du jQuery avec, il va falloir le « transformer » en équivalent jQuery en écrivant $(this).
$("h2").each(function() {
//on récupère le texte
var chapterName = $(this).text();
console.log(chapterName);
});
Adapter la hauteur de 3 div en fonction du plus haut des div –on utilise jQuery et les
méthodes each() et css()
http://jsfiddle.net/jY4bL/
http://jsfiddle.net/GNGRm/
39
Plus sur le DOM: http://api.jquery.com/category/manipulation/
Les événements
Le o ept d’évé e e t
On dit souvent que JavaScript permet de faire des sites web interactifs, en effet, on voit souvent
da s les sites e des a tio s ui se d le he t lo s u o i te agit a e des l e ts su la page :
oîte de dialogue ui s ou e lo s d u li de sou is sur un lien, des éléments qui changent de taille
ou de couleur quand la souris passe dessus, des interactions possibles avec le clavier, et … tout ela
est possible grâce aux événements.
Un événement représente le moment précis où quelque chose arrive, pour vous permettre de mieux
comprendre, voici une liste des événements principaux des éléments HTML :
Mais il e iste des e e ts sp ifi ues pou l o jet window également, comme :
Pou i fo, l e e t resize sera très utile dans le cas où vous voulez faire un site web responsive,
est-à-di e ui s adapte e fo tio de l a du isiteu a o al, ta lette, s a tpho e,et …
40
Associer un événement à un élément
Associer un événement à un élément en JavaScript ou jQuery ressemble très fort à ce que nous
a o s u pou odifie les p op i t s d u l e t, ela o siste e tapes :
En JavaScript
Concrètement il existe plusieurs mani es d asso ie u e e tàu l e t HTML en
JavaScript pur, retenez surtout la première :
2. Via le DOM, à la manière « DOM-2 ». C est plus « propre » mais il y a pas mal de problèmes
de compatibilité entre les navigateurs (Internet Explorer gère différemment des autres le
le de ie d u e e t , du oup est assez o pli u à utilise . Cette manière fait
appel à la méthode addEventListener(). Sachez les reconnaitre mais préférez la manière plus
simple du « DOM-0 »
myButton.addEventListener('click', function() {
console.log("Clic sur le bouton");
}, false);
41
Avec jQuery
Avec jQuery, nous allons comme toujours utiliser les sélecteurs CSS pour sélectionner le(s)
l e t s au uel s asso ie l e e t.
Ensuite nous allons chainer une méthode dont le nom correspond exactement au tableau des
événements. Par exemple click() ou mouseover().
Enfin nous allons passer une fonction, généralement une fonction anonyme.
Syntaxe :
$ sélecteur’).événement(function() {
action1;
…
});
Créer des span sous forme de « tags » à pa ti d u array – on utilise jQuery avec des
événements souris
http://jsfiddle.net/S8nt7/
$ sélecteur’).hover(
function() {
//A tio ua d la sou is passe su l l e t
},
function() {
//A tio ua d la sou is pa t de l l e t
}
42
);
Par exemple, supposons que le visiteur passe sa souris au-dessus d u lie a e l ID « menu », vous
voulez faire apparaître un div (par défaut non- isi le a e l ID « submenu ». Quand la souris quitte
le lien, vous voulez faire de nouveau disparaître le « submenu »
http://jsfiddle.net/r8rPS/
Quand une page web se charge, le navigateur va immédiatement essayer de lancer tous les scripts
u il e o t e. Ça peut t e p o l ati ue a e u s ipt ui a ipule le o te u de la page et ui
se la e a a t ue tout le o te u de la page soit ha g … Cela g e a plei d e eu s !
Il faut donc dire au script « attend que la page soit chargée pour te lancer ».
C est possi le e Ja aS ipt ia la thode window.load() mais cette méthode attend que tous les
contenus associés (images, CSS, scripts, ani atio s Flash, id os… soie t ha g s pou se la e et
ça peut prendre pas mal de temps ! Heureusement, jQuery fournit la méthode ready() qui attend
ue la page soit ha g e ais atte d pas tous les o te us o e les i ages, id os, ou aut e.
$(document).ready(function() {
//votre code ici
}) ;
$(function() {
//votre code ici
}) ;
Vous devez rajouter ce code à chaque page où vous souhaitez exécuter du code lorsque la page est
chargée. Si vous vous retrouvez avec plusieurs ready(), e est pas u p o l e.
43
L’o jet Event
Vous vous demandez peut-être : « mais comment je fais pour récupérer la position de la souris
alors ? » ou « o e t je peu sa oi su uelle tou he l utilisateu ie t d appu e ? ». On peut
ie sû up e es i fo atio s, ça se fait ia l o jet Event.
Cet objet est bien particulier dans le sens où il n'est accessible que lorsqu'un événement est
déclenché. Son accès ne peut se faire que dans une fonction exécutée par un événement, cela se fait
de la manière suivante en jQuery
http://jsfiddle.net/sfWns/
http://jsfiddle.net/Wfgcm/
Certains éléments HTML ont une réponse préprogrammée aux événements, par exemple un lien
ha ge u e page ua d o li ue dessus, u fo ulai e e oie ses do es à u se eu e , et …
Il a i e ue l o euille « couper » le comportement normal de cet événement : que le lien ne
redirige pas vers la page ou que le formulaire ne poste pas ses données vers le serveur car certains
de ses champs ne sont pas remplis correctement.
44
Da s e as, il suffit, u e fois da s le o ps de la fo tio a o e asso i e à l e e t,
d appele la thode preventDefault() de l o jet E e t ou de si ple e t etou e la aleu false.
$(‘#myLink’).click(function(e) {
e.preventDefault();
});
Equivaut à
$(‘#myLink’).click(function(e) {
return false;
});
{
propriété1 : valeur1 ,
propriété2 : valeur2
}
La propriété et la valeur sont séparés par : et chaque paire propriété/valeur doit être séparée par
une virgule mais il ne fait pas en mettre après la dernière paire propriété/valeur ! Les apostrophes
autour des propriétés sont facultatives sauf si les noms des propriétés contiennent des caractères
spéciaux.
var data = {
firstName : Michel ,
lastName : Dupont ,
city : Bruxelles
};
45
Et après on peut bien sûr récupérer chaque propriété individuellement :
console.log(data.firstName);
$ #menu .animate
{
left : 0 ,
fontSize : 15
}
);
Pour rappel, un Array est une variable qui contient plusieurs valeurs, appelées items. Chaque item
est accessible au moyen d'un indice (index) numérique. Dans un tableau associatif, on accède à un
item non pas par un indice numérique mais pas une valeur textuelle appelée clé (ou key).
var data = {
firstName : Michel ,
lastName : Dupont ,
city : Bruxelles
};
Pour rajouter des éléments à ce tableau, il suffit simplement de spécifier une nouvelle propriété/clé
en lui donnait une valeur, par exemple :
data.country = Belgique ;
46
data[ country ] = Belgique ;
La boucle for in
Il existe une variante de la boucle for ui s appelle for in. Cette boucle permet de boucler sur un
tableau associatif (et donc par définition, sur un objet littéral !). Le fonctionnement est quasiment le
même que pour un Array, excepté qu'ici il suffit de fournir une « variable clé » qui reçoit un
identifiant (au lieu d'un index) et de spécifier l'objet à parcourir :
Quel est l i t t ? Les objets littéraux se voient souvent attribuer des propriétés ou méthodes
supplémentaires par certains navigateurs ou certains scripts tiers utilisés dans la page, ce qui fait que
la boucle for in va permettre de tous les énumérer.
Dans les chapitres précédents, vous avez appris la base de jQuery : sélectionner des éléments, les
modifier, et leur attacher des événements.
Mai te a t est l heu e de passe au ôt le plus fu de jQue y, les effets visuels ! Comme pour la
modification et les événements, il faut :
1. Sélectionner le (ou les) élément(s) HTML avec le(s)quel(s) sur le(s)quel(s) on veut appliquer
un effet
2. Appli ue l effet ia la thode ad ho e do a t des pa a t es à la thode d effet
pour le « contrôler »
Apparaître et disparaître
Les effets les plus simples sont aussi les plus souvent utilisés. Voici les méthodes qui permettent de
faire apparaître et disparaître des éléments.
47
slideToggle() : si l l e t est a h , il s affi he ; s il est affi h , il se a he a e u effet de
glissement
Un autre effet permet de faire passer un élément à une certaine opacité : fadeTo(). Il prend en
paramètre une valeur de vitesse, comme les aut es, ais aussi u pou e tage d opa it .
http://jsfiddle.net/r3XH9/
Les animations
Il est possible de faire des animations plus personnalisées grâce à la méthode animate() qui permet
de joue a e toute les p op i t s CSS u i ues taille de la poli e, positio d u l e t, opa it ,
la geu d u e o du e,…
{
left : 0px ,
opacity : 0.5,
fontSize : px
}
la du e de l a i atio , e illise o des - facultatif, 400 par défaut
l effet de t a sitio easing) – facultatif. De base uniquement les effets s i g ou li ea
sont possibles mais vous pouvez en avoir plus via cette librairie
http://gsgd.co.uk/sandbox/jquery/easing/
Une méthode de callback – facultatif. Il est possible de dire à la méthode animate() de
déclencher une méthode u e fois ue l a i atio est te i e.
http://jsfiddle.net/WsUcH/
48
Afficher la table des matières auto-g e lo s d u passage de la sou is a e u slide
horizontal
http://jsfiddle.net/r8rPS/
http://jsfiddle.net/dTtpT/
Bie sou e t, ous utilise ez ue les sélecteurs de base. Mais pour des opérations plus complexes
vous pourriez être amenés à combiner des sélecteurs et utiliser des fonctions avancées telles que :
Les sélecteurs descendants : pour cibler un tag qui se trouve dans un autre tag. Par exemple
pour pouvoir sélectionner tous les liens situés dans un ul ui au ait l ID « navbar » vous
écririez :
Les sélecteurs adjacents : pour sélectionner un tag qui se trouve juste après un autre. Si
vous voulez par exemple sélectionner un div ui se t ou e da s l HTML juste ap s u h2
a e l ID « header », ous s pa ez les s le teu s pa u +
49
Les séle teurs d attri uts : pour sélectionner des éléments qui possèdent un certain attribut
ou dont un certain attribut possède une valeur spécifique. Par exemple si vous voulez
sélectionner tous les tags img qui possèdent un attribut alt, ou tous les tags a qui pointent
vers un site extérieur (dont le href o e e pa http://
Voici les différentes possibilités :
o [attribut] : sélectionne les éléments qui possède l att i ut sp ifi
o [attribut= « valeur »] : s le tio e les l e ts do t l att i ut sp ifi possède la
valeur indiquée
o [attribut^= « valeur »] : s le tio e les l e ts do t l att i ut sp ifi commence
avec la valeur indiquée
o [attribut$= « valeur »] : s le tio e les l e ts do t l att ibut spécifié termine
avec la valeur indiquée
o [attribut*= « valeur »] : s le tio e les l e ts do t l att i ut sp ifi contient
avec la valeur indiquée
Les filtres
jQuery donne la possibilité de filtrer les sélection en fonction de certains critères. Par exemple, si
vous ajoutez :even à la suite d u s le teu , alo s ous e up ez ue les l e ts pai s d un
g oupe d l e ts.
De plus, vous pouvez des éléments qui contiennent un tag particulier, un texte spécifique, les
éléments cachés et même ceux qui ne correspond pas à un certain sélecteur. Pour utiliser un filtre,
rajouter un deux-points suivi du nom du filtre :
50
Mais il existe aussi des thodes pou filt e les l e ts d u e s le tio :
Exemples de filtres
http://jsfiddle.net/5NEuW/
Parcourir le DOM
Bien souvent, après avoir sélectionné un élément ous allez ouloi t ou e d aut es l e ts e
relation avec celui- i. Pa e e ple, da s ous ous et ou ez da s la fo tio li e à l e e t
click sur une image, vous voulez retrouver un span enfant pour le faire apparaitre ou disparaitre ou
un div parent pour lui appliquer un style. C est là ue les méthodes qui permettent de traverser le
DOM entrent en piste. Elles permettent, à pa ti d u l e t s le tio , de t ou e d aut es
éléments, toujours via un sélecteur CSS.
51
Les méthodes utilitaires
Les plug-ins
Quand on parle de jQuery on entend souvent le terme plug-in. Un plug-i jQue est du code écrit
en JavaScript et qui utilise massivement jQuery pour but bien précis : afficher un calendrier, fournir
des effets visuels, permettre une gestion des cookies plus aisée, afficher des lightbox, afficher des
slide s, affi he des otifi atio s, et …
jQuery UI
Il ne faut pas chercher bien loin pour trouver des plug-ins jQuery, en effet il existe un « pack » de
contrôles utilisateurs disponibles sur le site de jQuery, jQuery UI. Ces contrôles permettent
d affi he u si ple hoi de date à fou i ua tit d aut es o t ôles, effets et i te a tio s. Pa
exemple :
un accordéon
un système d’auto o plete
des boutons déjà stylés
un choix de date
une barre de progression
des tabs
une gestion du drap&drop
et …
Autres plug-ins
Il e iste u e ua tit d aut es plug-ins gratuits disponibles, voici une liste non-exhaustive :
52
Savoir si l utilisateu est d jà e u su le site aupa a a t :
http://www.ravelrumba.com/blog/firstimpression-js-library-detecting-new-visitors/
Utiliser Google Maps de manière simple : http://hpneo.github.com/gmaps/ -
http://gmap3.net
Générer une table des matières automatiquement : http://projects.jga.me/toc/
O ga ise le o te u e tuiles : http://masonry.desandro.com/
Fa ilite l e utio d u e fo tio ua d o s olle u l e t :
http://imakewebthings.com/jquery-waypoints/
Pa alla , a igatio fi e, autos oll,… : https://github.com/Prinzhorn/skrollr
Pour réaliser des potentiomètres : http://anthonyterrien.com/knob/
Pour réaliser des notifications : http://needim.github.com/noty/ -
http://richardhsu.github.com/jquery.ambiance/
Afficher des infos complémentaires qui apparaissent sur le côté : http://srobbin.com/jquery-
plugins/pageslide/
Tooltips : http://craigsworks.com/projects/qtip2/
Rating : http://wbotelhos.com/raty/
Sliders : http://www.jqueryslidershock.com/ - http://dev7studios.com/nivo-slider/
Carousel : http://demo.dev7studios.com/caroufredsel/ - http://als.musings.it/
Gestion du scroll : https://github.com/sxalexander/jquery-scrollspy
Gestion des images de background : http://srobbin.com/jquery-plugins/backstretch/ -
http://static.elliotjaystocks.com/responsive-background-images/examples/solution.html
Lightbox : http://www.jacklmoore.com/colorbox
Transformations et transitions CSS : http://ricostacruz.com/jquery.transit/
Sélecteur But
:input Sélectionner tous les éléments de formulaire
53
:image Sélectionne tous les boutons image
:reset Sélectionne tous les boutons reset
:button Sélectionne tous les champs avec le type « button »
:file S le tio e tous les ha ps d upload
:hidden Sélectionner tous les champs cachés
Ces sélecteurs peuvent bien sûr être combinés à d aut es s le teu s. Ils s utilise t, pa e e ple
comme ceci (sélectionner tous les champs cachés du formulaire myForm) :
En plus, jQuery offre 2 sélecteurs pour permettre de récupérer les valeurs sélectionnées dans des
boutons radio/cases à cocher et dans des listes déroulantes :
Sélecteur But
:checked Sélectionne les éléments cochés (dans le cas de boutons radio ou cases à
cocher)
:selected Sélectionne les éléments sélectionnés dans une liste déroulante
E e ple d utilisatio :
Pou li e et odifie des aleu s, il suffit d utilise la thode .val(). Sans paramètre, celle-ci renvoie
la valeur du champ sur laquelle elle est appelée, et si on lui donne une valeur en paramètre, cela
aura pour effet de modifier le contenu du champ.
54
Dans le cas des boutons radio et des cases à cocher, o peut s p e d e aut e e t.
Pour lire la valeur, il faut vérifier si le radio/case à cocher est coché ou pas, et pour ce faire on peut
utiliser le filtre is()
Et pour cocher/décocher une case à cocher ou un radio, on peut utiliser la méthode attr() sur
l att i ut checked
$("#rememberMeInput").attr('checked', true);
Les événements
De manière similaire aux événements déjà vus, comme un clic de souris sur un lien ou une touche du
clavier qui est pressée, il existe des événements spécifiques aux formulaires. Ils sont au nombre de
5 : submit, focus, blur, click et change.
submit
L e e t submit est d le h lo s de l e oi d u fo ulai e, ue ça soit e li ua t su le
bouton submit ou en appuyant sur Enter quand vous tapez dans un champ texte du formulaire.
C est lors de cet événement que vous pouvez vérifier si le formulaire est valide ou non, en lui
associant du code via la méthode .submit().Da s le as où le fo ulai e est pas alide, il est
possi le d a ule so e oi ia u return false;
$("#registration").submit(function() {
console.log($("#name").val());
//empêcher l'envoi du formulaire
return false;
});
focus
Qua d ous li uez da s u ha p d u fo ulai e, e ha p eçoit e u o appelle le focus. Il est
possible d effe tue u e a tio lo s du fo us, e s le tio a t le ha p et e lui appli ua t la
méthode .focus().
$("#name").focus(function() {
console.log($(this).val());
});
55
Pour rappel, un événement peut être appelé manuellement si on ne lui fournit pas de paramètre.
Dans le cas de .focus() le fo us se a is su l l e t s le tio . Ce ui peut t e p ati ue pou
d jà positio e le u seu de te te da s le p e ie ha p d u fo ulai e pa e e ple.
blur
C est u peu le o t ai e de focus, blur est déclenché lorsque vous quittez un champ d u fo ulai e.
Cela peut être utile pour vérifier la validité des champs au fur et à mesure du remplissage du
formulaire et non tout à la fin, lors du submit. Pour effectuer une action lors du blur, il faut
sélectionner le champ et lui appliquer la méthode .blur()
$("#name").blur(function() {
console.log($(this).val());
});
click
Il est ide e t possi le d i te epte u li su u l e t d u fo ulai e, pa e e ple pou
effe tue u e a tio lo s u u e ase à o he est o h e. Cela fo tionne de manière similaire au
click vu précédemment
$("#rules").click(function() {
console.log($(this).is(":checked"));
});
change
L e e t change peut être utilisé dans le cas où vous voulez appliquer une action lorsque la
aleu d une liste déroulante change .
$("#level").change(function() {
console.log($(this).val());
});
Via jQuery il est bien sûr possi le de o t ôle l a ti atio d u ha p ou outo e lui
appliquant/retirant cet attribut de la manière suivante
56
//activer
$("#sendFormButton").attr('disabled',false);
//désactiver
$("#sendFormButton").attr('disabled',true);
Valider un formulaire
Introduction
La validation côté client (en JavaScript donc) est u e tape esse tielle lo s de la ise e pla e d u
fo ulai e. Elle pe et de s assu e ue les do es e t es pa l utilisateu so t ie p se tes
(par exemple une adresse de livraison da s le as d u e o a de et u elles o espo de t au
format attendu u fo at d e-mail pour une adresse mail, un texte sous forme de date pour une
date, u hiff e pou u e ua tit , et …
En JavaScript pur, cela peut vite devenir long compliqué de valider un formulaire, il faut notamment
connaître les expressions régulières. Heureusement, en jQuery, ces vérifications sont très simples à
mettre en place grâce au plugin jQuery Validate.
Il y a 2 manières de rajouter de la validation sur un formulaire avec jQuery Validate ; soit une
méthode « simple » qui consiste à attribuer des classes et attributs spécifiques da s l HTML, sur les
l e ts à alide i di ua t s ils so t e uis, leu t pe atte du, le essage d e eu et … ; soit la
manière « avancée » qui consiste à configurer la validation en JavaScript. Cette approche est à
p f e a elle pe et d alle eaucoup plus loin.
Configurer la validation
Pour configurer la validation, il faut d a o d do e u e aleu à l att i ut « name » de vos champs.
Ensuite, il faut appeler la méthode validate() sur le formulaire et lui passer un objet littéral qui va
définir des règles et, pour ces règles des messages d erreur.
La syntaxe est :
$ # fo .validate({
rules : {
nomDuChamp : t peDeValidatio
},
messages : {
nomDuChamp : {
typeDeValidation : Message d e eu
57
}
}) ;
Par exemple
$("#orderForm").validate({
rules: {
inputMail: {
required: true,
email: true
}
},
messages: {
inputMail:
{
required : "L e-mail est requis",
email: "L'e-mail n'a pas un format correct"
},
}
}) ;
Voi i les t pes de alidatio les plus utilis s u off e jQue Validate :
Validation But
required Le champ est requis
date La valeur du champ doit être une date
email La valeur du champ doit être un e-mail
url La valeur du champ doit être un URL
number La valeur du champ doit être un nombre décimal
digits La valeur du champ doit être un nombre entier
equalTo La valeur du champ doit gal à la aleu d u
autre champ
minlength La longueur de la valeur du champ doit être
supérieure à une certaine valeur
maxlength La longueur de la valeur du champ doit être
inférieure à une certaine valeur
min La valeur du champ doit être supérieure à une
certaine valeur
max La valeur du champ doit être inférieure à une
certaine valeur
Il est également possible de définir ses propres méthodes de validation via la méthode addMethod()
qui demande : u o , u e fo tio de alidatio et u essage d e eu pa d faut.
58
A noter que si le formulaire envoie ses données via une requête AJAX, il faut définir
l a tio à fai e da s le as où le fo ulai e est alide da s l optio submitHandler de la
méthode validate().
Par exemple, si vous avez un champ comme ceci dans votre HTML :
Il suffit d s lo s d ajoute da s ot e CSS de uoi st le la lasse « error ». Mais si vous voulez faire
plus lo s de l affi hage des essages d e eu o e st le u aut e l e t , ous pou ez utilise
d aut es optio s de .validate() comme errorPlacement, highlight, et …
Introduction
Les applications web ressemblent de plus en plus à des applications « desktop », le temps où votre
page web se rafraichissait complètement lorsque vous effectuiez une action est presque
révolu grâce à AJAX.
AJAX (acronyme pour Asynchronous JavaScript And XML) permet à une page web de contacter un
serveur web et de se rafraichir elle-même avec les données renvoyées par le serveur. Cela ouvre les
portes à des centaines de possibilités, comme :
59
Envoyer un formulaire et afficher un résultat instantanément
Se logguer sans quitter la page
Parcourir des longues listes
Et …
Des sites comme Google Maps, Google Docs, Facebook, Twitter ou autres utilisent AJAX
abondamment.
Fonctionnement
Il est tout à fait possi le d effe tue des appels AJAX e Ja aS ipt pu ia l o jet XMLHttpRequest,
ais il est ie plus ais d utilise jQue .
Méthodes jQuery
jQuery offre plusieurs méthodes pour effectuer des appels asynchrones en AJAX, les voici :
.load()
.load() permet de charger le contenu d'une autre page web et de placer le contenu dans le sélecteur
sur lequel la méthode est appelée.
Il est possible de lui préciser un sélecteur de la page cible afin de ne sélectionner qu'une partie de la
page à charger.
Cette méthode ne requiert pas d'intervention de la part d'un serveur web.
60
//charge le contenu de l élément #newsItem de la page today.html
dans l élément #headlines de la page courante
$ #headlines .load today.html #newsItem ;
$.get() et $.post()
$.get() et $.post() : ces méthodes (autonomes) permettent de charger des données d'un serveur web
via une requête GET ou POST.
Les données renvoyées peuvent être de différents formats: texte, HTML, XML ou JSON
$.getJSON()
$.getJSON() permet de charger des données d'un serveur web au format JSON via une requête GET.
Cette méthode est identique à $.get ais le fo at e o est d offi e du JSON
$.ajax()
Cette méthode est la plus complète et flexible de toutes. $.get, $.post et $.getJSON sont des
« raccourcis » de $.ajax(). C est do gale e t elle ui de a de le plus de o figu atio .
Pour la configurer, il suffit de lui passer un objet littéral. Les paramètres de cet objet les plus
couramment utilisés sont :
61
Plus sur AJAX avec jQuery : http://api.jquery.com/category/ajax/
Les cookies
Les cookies ont été inventés par Netscape afin de donner une "mémoire" aux serveurs et
navigateurs Web. Le protocole HTTP, qui gère le transfert des pages Web vers le navigateur ainsi que
les demandes de pages du navigateur vers le serveur, est dit stateless (sans état) : cela signifie
qu'une fois la page envoyée vers le navigateur, il n'a aucun moyen d'en garder une trace. Vous
pourrez donc venir deux, trois, cent fois sur la page, le serveur considérera toujours qu'il s'agit de
votre première visite.
Cela peut être gênant à plusieurs titres : le serveur ne peut pas se souvenir si vous êtes authentifié à
une page protégée, n'est pas capable de conserver vos préférences utilisateur, etc. En résumé, il ne
peut se souvenir de rien ! De plus, lorsque la personnalisation a été créée, cela est vite devenu un
problème majeur.
Les cookies ont été inventés pour remédier à ces problèmes. Il existe d'autres solutions pour les
contourner, mais les cookies sont très simples à maintenir et très souples d'emploi.
Ils sont stockés sous forme de fichiers textes dans le répertoire de fichiers temporaires de votre
a igateu et pe ette t, pa e e ple, de ete i u hoi de la gue effe tu pa l utilisateu su
votre site afin de ne pas devoir lui redemander à sa prochaine visite.
jsFiddle lui utilise par exemple les cookies pour se « souvenir » des positions et des grandeurs des
différentes fenêtres.
Si vous voulez stocker des informations dans un cookie, vous devrez spécifier 3 choses :
http://jsfiddle.net/BFmdg/
62
Pou ifie les ookies, leu aleu et date d e pi atio ous pou ez utilise l o glet « Cookies » de
Firebug
A savoir, pour des raisons de sécurité, vous ne pouvez pas modifier la valeur des cookies
marqués comme « Http Only » en JavaScript ! Vous pouvez voir ces types de cookies dans
Firebug également. Ce sont généralement des cookies qui contiennent des informations
« sensibles » comme un identifiant de session
Important à savoir, JavaScript stocke les dates en millisecondes. Mais heureusement pour nous, le
o st u teu de l o jet Date peut prendre en charge plusieurs paramètres pour nous permettre de
construire une date, mais retenez surtout ces deux-cis :
new Date();
new Date(année, mois, jour [, heure, minutes, secondes,
millisecondes ]);
63
La première ligne instancie un objet Date dont la date est fixée à celle de l'instant même de
l'instanciation.
La deuxième ligne permet de spécifier manuellement chaque composant qui constitue une
date, nous retrouvons donc en paramètres obligatoires : l'année, le mois et le jour. Les
quatre derniers paramètres sont facultatifs (c'est pour cela que vous voyez des crochets, ils
signifient que les paramètres sont facultatifs). Ils seront initialisés à 0 s'ils ne sont pas
spécifiés, nous y retrouvons : les heures, les minutes, les secondes et les millisecondes.
Une fois un objet Date instancié, vous pouvez utiliser ces méthodes :
http://jsfiddle.net/fkKMv/
Le debug
Mais uel t pe d e eu s peut-on bien faire ? Cela peut être une erreur de frappe : on a oublié un
caractère, o a al o thog aphi le o d u e fo tio et du oup Ja aS ipt e la t ou e pas, ou
alo s o a si ple e t fait u e e eu da s ot e logi ue e faisa t u e di isio au lieu d u e
multiplication.
A e les ieu a igateu s, les essages d e eu Ja aS ipt taie t pas des plus pa la ts, et il
fallait user et abuser de la méthode alert(), u o diss i ait u peu pa tout da s le ode e
espérant trouver la ligne qui pose problème ! Encore faut-il, une fois la ligne coupable trouvée,
savoir le corriger
Cette p iode de gal e est olue, tous les a igateu s poss de t u e o sole d e eu s et puis
est sa s o pte su ot e fid le Fi e ug ! Il affi he des essages d e eu s assez lai s e
i di ua t g ale e t l e d oit e a t où l e eu s est p oduite.
Mais on peut faire plus : pou d ugge du ode da s Fi e ug, allez da s l o glet « Script » et
activez-le. Vous pouvez choisir le script à analyser et y insérer des breakpoints ou poi ts d a ts. Ils
64
servent à faire une pause sur une ligne d'un code JavaScript et à afficher l'état complet des variables,
méthodes, objets, etc. La quantité d'informations disponible est tout simplement immense, vous
pouvez les retrouver dans le cadre de droite de Firebug dès qu'un point d'arrêt est atteint. Vous
pouvez aussi passe d u poi t d a t à u aut e pou oi « au ralenti » l e utio de ot e s ipt.
Disons que vous avez un script où vous vous dites « à cet endroit-là, a des ha es ue ça pla te »
car vous faites un calcul complexe, ou faites une opération à partir de données rentrées par
l utilisateu . Au lieu de oise les doigts pou ue ça a i e pas, ous pou ez ett e e pla e u e
gestio d e eu s.
La gestio d e eu s se fait à l aide du lo d i st u tio try catch. Dans le try on va essayer le code,
et si une erreur (ou exception) survient, on passe dans le bloc catch, où l o a e ute u e a tio
e as d e eu affi hage d u essage, log de l e eu , ou aut e…
Si vous voulez vous-même dans votre code renvoyer une erreur (si un paramètre est incorrect par
exemple), vous pouvez le fai e à l aide de l i st u tio throw.
La minification
Quand vous vous lancerez à la recherche de librairies JavaScript, vous allez souvent voir une version
.js et une version .min.js du script. Que veut dire ce « min » ? Il sig ifie ue est u e e sio du
script qui a été minifiée : cela consiste à retirer tous les espaces, les commentaires et les retours à la
ligne inutiles du code.
Préférez donc un code « non-minifié » pour développer et puis au-moment de mettre votre site en
ligne, changez les références dans vos pages du script « non-minifié » vers le script minifié et mettez
la version minifiée en ligne.
http://dean.edwards.name/packer/
http://jsbeautifier.org/
65
Plus d’i for atio s
http://api.jquery.com/
jQuery Fundamentals
http://jqfundamentals.com/
http://coding.smashingmagazine.com/2012/05/31/50-jquery-function-demos-for-
aspiring-web-developers/
Sources
JavaScript & jQuery : the missing manual par David Sawyer McFarland
JavaScript sur Codecademy.com
Dynamisez vos sites web avec JavaScript ! sur le site du Zér0
66