Written by
Yoann Pigné
on
on
jQuery
- Ecrit par John Resig
- Depuis janvier 2006
- Applications coté client
- Multi-navigateurs multi-OS
- Fonctionnalité principale : parcours et manipulation du DOM
- Autres fonctionnalités : les évènements, AJAX, les animations, etc.
- Extensions de la bibliothèque par plugins
- Code concis, fichier très petit
La fonction jQuery()
- Tout commence par cette fonction
- «factory» pour tous les objets jQuery
- Code en 2 parties : requête & action
jQuery(".even").hide()
- «$» alias de «jQuery»
jQuery("div.even") ➔ $("div.even")
Sélecteurs CSS 2 et 3
a[rel]
div[class~="even"]
a[href^="http://"]
ul#nav > li
li#current ~ li
li:first-child, li:last-child, li:nth-child(3)
D’autres sélecteurs et pseudo-classes
div:first, h3:last
:header
:hidden,:visible
:animated
:input,:text,:password,:radio,:submit...
div:contains(Hello)
(http://api.jquery.com/category/selectors/)
jQuery()
retourne un tableau
- Collections (objet) jQuery
$('.odd')
[<div class=!"odd" id=!"d1">!that's d1!</div>,
<div class=!"odd" id=!"d3">!that's d3!</div> ,
<div class=!"odd" id=!"d5">!that's d5!</div>!,
<div class=!"odd" id=!"d7">!that's d7!</div>!]
- Peut se traiter comme un tableau
$(".odd").length;
$(".odd")[0];
- On peut leur appliquer des méthodes
$(".odd").size();
$(".odd").each(function() {
console.log(this);
});
Action sur la sélection
- Méthodes qui manipulent l’objet appelant (les objets du tableau sélectionné)
- Elles retournent généralement l’objet (la collection) appelant
- Actions ou commandes enchainables
$(".odd").add(".even").addClass("darcker").show("fast");
Consistance du code
Nom des fonctions
click()
vs. onclick()
Position des arguments
object.methode(options, arg1, arg2, ... , callback)
Contexte des callbacks
.methode(function(){
// this == DOMElement
});
Manipulations HTML
$(".even:first").text("First \"even\" div on the page.")
$(".odd:last").html("<ul><li>The last</li><li>odd div</li></ul>")
Manipulations d’attributs
$('a.nav').attr('href', 'http://flickr.com/');
$('a.nav').attr({
'href': 'http://flickr.com/',
'id': 'flickr'
});
$('#intro').removeAttr('id');
Manipulations CSS
$('#intro').addClass('highlighted');
$('#intro').removeClass('highlighted');
$('#intro').toggleClass('highlighted');
$('.div').css("background-color", "#eee");
jQuery(".div").css({
"background-color": "#eee",
"border": "1px solid #555"
})
Retour de valeurs
Certaines méthodes retournent une valeur pour le première élément de la collection.
var height = $('div#intro').height();
var src = $('img.photo').attr('src');
var lastP = $('p:last').html();
var hasFoo = $('p').hasClass('foo');
var email = $('input#email').val();
Parcours du DOM
$('div.section').parent();
$('div.section').next();
$('div.section').prev();
$('div.section').nextAll('div');
$('h1:first').parents();
Gestion des évènements
$('a:first').click(function(ev){
$(this).css({ "background-color": "#a0a8b8"});
return false; // ou ev.preventDefault();
}
blur, change, click, dblclick, error, focus, hover, ready, resize, scroll, select, submit, toggle
http://api.jquery.com/category/events/
Unobtrusive JS
$(document).ready(function(){
alert('Le DOM est prêt !')
});
⬇
$(function(){
alert('Le DOM est prêt !')
});
Chainage des actions
- Les actions classiques renvoient la collection appelante
- Certains renvoient une collection différente
end()
revient à la collection précédente
$('.intro').css('color','#ccc')
.find('a').addClass('highlight')
.end()
.find('em').css('color','red')
.end()
Autres méthodes ≠ actions
Ne s’appliquent pas obligatoirement sur des objets jQuery.
Méthodes de l’objet global (le module) jQuery
ou $
- Utilitaires
$.isArray()
$.trim()
$.type()
$.paseJSON()
- AJAX
$.ajax()
$.get()
$.post()
$.getJSON()
AJAX
S’appliquant sur un objet jQuery
$("#data").load("/some/file.html")
Méthode bas niveau:
$.ajax({
url: "test.html",
context: document.body,
success: function(){
$(this).addClass("done");
}
});
Méthodes haut niveau
$.get()
$.post()
$.getJSON()
$.getScript()
http://api.jquery.com/category/ajax/
Animation
jQuery a quelques effets pré-installés
$('h1').hide('slow');
$('h1').slideDown('fast');
$('h1').fadeOut(2000);
On peut les enchainer
$('h1').fadeOut(2000).slideDown();
http://api.jquery.com/category/effects/
Plugins
- AJAX
- DOM
- Drag-Drop
- Menu
- Navigation
- Tableaux
- …