
Bibliothèque JavaScript créée en 2006
par John Resig / @jeresig
(également créateur de Processing.js et Sizzle.js)
Code libre et open-source, disponible sur Github
Conçu pour faciliter l'écriture de scripts côté client.
Google, Amazon, Mozilla, Wordpress, Intel, BBC, Bank of America, IBM, Codeschool, ... et beaucoup beaucoup d'autres !
Développement plus rapide en cycle de production.
Librairie très légère, en comparaison à
ce qu'elle permet de faire.
Compatibilité cross-browsers
De nombreux plugins et une forte communauté.
jQuery n'est pas un langage de programmation !
On ne programme pas en jQuery ... on programme en JavaScript !
jQuery n'est pas un framework (≠ Angular, Vue.js)
C'est une librairie qui fournit des fonctions utilitaires
jQuery n'est pas unique
Principal concurrent : Mootools
jQuery est un fichier JavaScript, facilement téléchargeable via le site officiel.
jquery.js
jquery.min.js
Il s'inclut donc dans une page web comme un fichier JS normal :
<script src="jquery.js"></script>
<script src="jquery.min.js"></script>
Via le site web
https://jquery.com
Via un CDN
https://unpkg.com/jquery
Via NPM
npm install jquery
<!DOCTYPE html> <html> <head> <title>Mon site utilisant jQuery...</title> </head> <body> <script src="https://unpkg.com/jquery"></script> <script> /* jQuery fournit la variable globale « jQuery », aussi connue par le raccourci « $ » */ </script> </body> </html>index.html
Fonction maîtresse / de haut niveau.
Généralement utilisée pour sélectionner un groupe de balises HTML à la façon d'un sélecteur CSS.
article > p {
font-size: 14px;
}
jQuery('article > p')
.css('font-size', '14px');
Cette fonction jQuery() est couramment utilisée et écrite très souvent dans le code JS.
Cela devient fastidieux d'avoir des jQuery() partout dans le code ...
C'est pourquoi, jQuery() possède un alias : $()
article > p {
font-size: 14px;
}
$('article > p')
.css('font-size', '14px');
Un code qui intéragit sur le DOM ne doit être exécuté que lorsque le navigateur à construit l'intégralité de l'arbre.
On réagit à l'événement natif DOMContentLoaded
document.addEventListener('DOMContentLoaded', function() {
// Do something cool with the DOM...
}, false);
$(document).ready(function() {
// Do something cool with the DOM...
});
document
est un objet DOM JavaScript standard.
$(document)
retourne un objet jQuery.
<button id="btn">Click me</button>
var myButton = document.getElementById('btn');
// JavaScript natif
myButton.style.display = "none";
// jQuery
$(myButton).hide();
// ou
$('#btn').hide();
jQuery peut être considéré comme un ensemble de méthodes pour faciliter la manipulation du DOM
Il existe de nombreuses méthodes jQuery :
.addClass().removeClass().toggleClass().hasClass().attr().removeAttr().insertAfter().insertBefore().css().text().html().append().prepend().remove().show().hide()Doc : api.jquery.com
Le traversing en jQuery décrit la possibilité de naviguer à travers l'arbre DOM.
Problème :
Comment appliquer la classe CSS .selected au <label> parent de la case cliquée ?
<label>
<input type="checkbox"> Option 1
</label>
<label>
<input type="checkbox"> Option 2
</label>
<label>
<input type="checkbox"> Option 3
</label>
$('[type=checkbox]').click(function() {
$(this)
.parent('label')
.toggleClass('visible');
});
Liens de parenté
<nav>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
</nav>
$('nav').find('li') /* À partir du <nav>,
trouver les <li>
enfants les plus
proches */
// OU l'inverse :
$('li').parents('nav') /* À partir du <li>,
trouver le <nav>
parent le plus
proche */
Liens de proximité
<div class="un">1</div>
<div class="deux">2</div>
<div class="trois">3</div>
$('.un').next().next(); /* Va chercher la
div .trois */
$('.deux').prev(); /* Va chercher la div
.un */
Grâce au traversing, on peut facilement naviguer et accéder à un ou plusieurs éléments à partir de n'importe quel endroit grâce aux fonctions .find(), .parents(), .prev() et .next()
Liste des méthodes jQuery appartenant à la catégorie du traversing :
https://api.jquery.com/category/traversing/
En JavaScript, un évènement représente une action effectuée par le visiteur (clic, mouvement de souris, appui sur une touche, ...)
click : Clic sur un élémentdblclick : Double-clic sur un élémentkeydown : Touche enfoncéekeyup : Touche relâchéeinput : Touche caractère presséemouseenter : Souris arrivant sur un élémentmouseleave : Souris sortant d'un élémentmousemove : Souris bougeant sur un élémentsubmit : Soumission d'un formulaireÉvénement "click" sur un bouton
<button id="btn"> Mon bouton </button>
function quandOnClique () {
alert("Clic détecté");
}
$('#btn').on('click', quandOnClique );
// ou
$('#btn').click( quandOnClique );
this
<button>
Bouton <strong>1</strong>
</button>
<button>
Bouton <strong>2</strong>
</button>
<button>
Bouton <strong>3</strong>
</button>
$('button').on('click', function() {
var nbButton = $(this).find('strong').text();
alert("Clic sur le n°" + nbButton);
});
Évènement "mousemove" sur une div
<div id="position-souris"></div>
function quandLaSourisBouge (event) {
$('#position-souris').text('x : ' + event.pageX + ', y : ' + event.pageY);
}
$('#position-souris').on('mousemove', quandLaSourisBouge);
event
function handler(event) {
console.log( event.type, event.pageX, event.pageY, event.keyCode );
}
$('#myDiv').on('click', handler);
// "click", 39, 42, undefined);
$('#myDiv').on('mouseenter', handler);
// "mousenter", 39, 42, undefined);
$(document).on('keydown', handler);
// "keydown", undefined, undefined, 13
Exemple avec l'évènement "keydown"
<img src="vaisseau.png" id="vaisseau">
function deplacerVaisseau (event) {
if (event.keyCode === 68) { // 68 => D
$('#vaisseau').css('margin-left', '+=15px');
}
else if (event.keyCode === 81) { // 81 => Q
$('#vaisseau').css('margin-left', '-=15px');
}
}
$(document).on('keydown', deplacerVaisseau);
Exemple avec l'évènement "submit"
<form action="#" id="formulaire">
<input type="text" name="prenom">
<button type="submit">Soumettre</button>
</form>
function soumettreFormulaire (event) {
/*
Empêche le rafraîchissement de la page : le comportement
par défaut du navigateur
*/
event.preventDefault();
alert('Bonjour ' + $('input[name=prenom]').val() + ' !');
}
$('#formulaire').on('submit', soumettreFormulaire);
Liste des méthodes jQuery appartenant à la catégorie des évènements :
http://api.jquery.com/category/events/
L'API jQuery de base fournit quelques méthodes pour créer des animations simples (fondu, slide, transition) et les contrôler (stopper, délayer)
Le célèbre effet d'apparition/disparition en fondu :
Le célèbre effet d'apparition/disparition en défilement :
jQuery fournit également une méthode .animate() qui permet d'intéragir sur les propriétés CSS de l'élément en créant une interpolation.
$('#carre').animate({
'border-width' : '9px',
'width' : '150px',
'height' : '150px'
});
Toutes les animations réalisées avec ces méthodes jQuery font appel au CPU (Central Processing Unit)
Les animations CSS3 quant à elles, font appel
au GPU (Graphics Processing Unit)
Asynchronous Javascript And Xml
Technologie faisant partie de JavaScript qui permet d'envoyer une requête au serveur dans le but d'obtenir des données.
Globalement, dès qu'on a besoin de récupérer un contenu distant.
(par exemple : un fichier HTML, ou encore des informations provenant d'un serveur web)
La méthode .load() permet de charger un fichier externe dans une balise HTML de la page principale
Hello! Je suis du <b>HTML</b> qui provient du fichier <code>ajax.html</code>!ajax.html
<div id="target"></div> <button>Lancer la requête</button> <script> $('button').on('click', function() { $('#target').load('ajax.html'); }); </script>index.html
<ul> <li><a href="#">Home</a></li> <li><a href="#">Folio</a></li> <li><a href="#">Contact</a></li> </ul>menu.html
<nav id="menu"></nav> <script> $('#menu').load( 'menu.html' ); </script>index.html
$.getJSON('https://api.myjson.com/bins/16zla', function(data) {
console.log(data);
});
Comparable à $.getJSON , mais pour récupérer un type de contenu plus généraliste.
$.get('https://monsite.com/fichier.txt', function(dataTxt) {
console.log(dataTxt);
});
La méthode jQuery.ajax() - ou $.ajax() - est un peu plus poussée et permet de configurer une requête de manière plus détaillée, et de traiter sa réponse
// Lancement de la requête ...
var requete = $.ajax( 'menu.html' );
// En cas de succès
requete.done(function (data) {
alert("La requête a abouti et les données récupérées sont : " + data);
});
// En cas d'erreur
requete.fail(function (jqXHR, textStatus, errorThrown) {
alert("La requête n'a pas abouti pour la raison suivante : " + errorThrown);
});
<form action="#" id="mail-form"> <input type="email" name="email"> <input type="submit"> </form>index.html
$('#mail-form').on('submit', function (evt) { evt.preventDefault(); var requete = $.ajax('verifier-email.php', { data: { email: $('[name=email]').val() } }); requete.done(function (data) { if (data.email.exists) { alert("Le serveur indique que cette @ email existe bien dans sa base"); } }); });main.js
Une requête Ajax en JavaScript est asynchrone par défaut !
Qu'est ce que ça veut dire ?
Admettons le code suivant :
var cibles = ['header.html', 'menu.html', 'footer.html'];
for (var i = 0; i < cibles.length; ++i) {
var requete = $.ajax( cibles[i] );
requete.done(function (data) {
alert('Requête effectuée sur ' + cibles[i]);
});
}
Problème constaté :cibles[i] renvoie undefined
Explication :
la boucle for() a tourné 3 fois, et à laissé à la fin une variable i à la valeur 3
La réponse du serveur a ensuite été reçue un peu plus tard dans le temps, au moment où i était déjà arrivé à 3
À savoir que l'on peut solutionner ce cas de figure en créant une IIFE
var cibles = ['header.html', 'menu.html', 'footer.html'];
for (var i = 0; i < cibles.length; ++i) {
(function(i) {
var requete = $.ajax( cibles[i] );
requete.done(function (data) {
alert('Requête effectuée sur ' + cibles[i]);
});
})(i)
}
Pour finir, une requête Ajax n'est pas forcément asynchrone, on a la possibilité de le paramètrer avec l'option async : false
Asynchrone (par défaut)
var req = $.ajax('menu.html');
req.done(function() {
alert("UN");
});
alert("DEUX");
Synchrone
var req = $.ajax('menu.html', {
async: false
});
req.done(function() {
alert("UN");
});
alert("DEUX");
A ne faire qu'en bonne connaissance de cause !
Bloquer l'asynchronicité revient à surcharger les temps d'exécution de vos scripts sur une page
jQuery UI est une couche supplémentaire ajoutée à jQuery
Il permet de mettre rapidement en place des interfaces utilisateur (UI)
jQuery UI est livré avec un thème par défaut
Pour le personnaliser, il existe le ThemeRoller du site jqueryui.com
Les fonctionnalités offertes par jQuery UI sont tout simplement des plugins
$('img').draggable();


$('img').resizable();

$('ul').sortable();
droppable, selectable, accordion, autocomplete, datepicker, tabs
jqueryui.comjQuery : http://api.jquery.com
jQuery UI : http://api.jqueryui.com