650 likes | 936 Views
Programmation Web : DOM / JavaScript. Jérôme CUTRONA jerome.cutrona@univ-reims.fr. DOM = Document Object Model. API (Application Programming Interface) pour la manipulation de HTML / XML Définit la structure logique des documents Définit la façon d’y accéder, de la manipuler
E N D
Programmation Web :DOM / JavaScript Jérôme CUTRONA jerome.cutrona@univ-reims.fr Programmation Web 2013-2014
DOM = Document Object Model • API (Application Programming Interface) pour la manipulation de HTML / XML • Définit la structure logique des documents • Définit la façon d’y accéder, de la manipuler • Créer des documents • Parcourir leur structure • Ajouter, effacer, modifier des éléments • Ajouter, effacer, modifier leur contenu Programmation Web 2013-2014
Qu’est-ce que le DOM ? <table> <tbody> <tr><td>A</td> <td>B</td> </tr> <tr><td>C</td> <td>D</td> </tr> </tbody> </table> Programmation Web 2013-2014
Qu’est-ce que le DOM ? • Représentation arborescente du document • Modèle objet (structure + méthodes) • Permet la manipulation du document • Une implémentation : JavaScript… • … Des implémentations : • JavaScript IE • JavaScript Mozilla / Firefox • JavaScript Opera • … Programmation Web 2013-2014
JavaScript : Principe • Langage de script objet • Syntaxe style C / C++ / Java • Sensible à la casse • N’est PAS du Java • Exécuté par le client Web • Peut être désactivé sur le client • Nombreux objets pour la manipulation HTML • Gestion des événements HTML • Rendre les pages dynamiques (HTML+CSS+JS) • Haut niveau d’incompatibilité… Programmation Web 2013-2014
JavaScript : Exemple <html> <head> <title>Ma première page Web</title> </head> <body> <scripttype="text/javascript"language="JavaScript"> <!-- document.writeln("Salut !") ; // --> </script> </body> </html> Programmation Web 2013-2014
Structures conditionnelles if(condition) { instructions ; } [ else { instructions ; } ] Programmation Web 2013-2014
Structures conditionnelles switch(expression) { caseétiquette: instructions ; break ; caseétiquette: instructions ; break ; default: instructions ; } Programmation Web 2013-2014
Structures itératives while(condition) { instructions ; } do { instructions ; } while(condition) ; Programmation Web 2013-2014
Structures itératives for(instr ;condition ; instr) { instructions ; } for(variable inobjet|tableau) { instructions ; } for each(variable inobjet|tableau) { instructions ; } Programmation Web 2013-2014
Commentaires // Commentaire ligne /* Commentaire multi-lignes */ Programmation Web 2013-2014
Variables • Déclaration de variables facultative • Variables non typées à la déclaration varnom_variable ; • Typage dynamique à l’affectation : • Nombres (42, 3.14) • Booléens (true, false) • Chaînes ("Salut !", 'Salut !' ) • null • undefined • Fonctions • Objets Programmation Web 2013-2014
Typage des variables à l’affectation undefined number number string boolean object function object Programmation Web 2013-2014 var v ; window.alert("Type de " + v + " : " + typeof v) ; v = 12 ; window.alert("Type de " + v + " : " + typeof v) ; v = 12.42 ; window.alert("Type de " + v + " : " + typeof v) ; v = 'hello' ; window.alert("Type de " + v + " : " + typeof v) ; v = true ; window.alert("Type de " + v + " : " + typeof v) ; v = null ; window.alert("Type de " + v + " : " + typeof v) ; v = function(a){return a+12 ; } ; window.alert("Type de " + v + " : " + typeof v) ; v = { a:12, b:'attr'} ; window.alert("Type de " + v + " : " + typeof v) ;
Fonctions : définition classique • Valeur de retour non typée • Paramètres non typés // Définition : functionma_fonction(arguments) { instructions ; returnquelque_chose; // ou pas… } // Appel : ma_fonction(12) ; Programmation Web 2013-2014
Fonctions : variable et affectation 84 144 144 24 Programmation Web 2013-2014 Fonction est un type de variable function f(a){ return a + a ; } var g = function(a){ return a * a ; } ; function h(a, une_fonction){ returnune_fonction(a) ; } window.alert("f(42) : " + f(42)) ; window.alert("g(12) : " + g(12)) ; window.alert("h(12, g) : " + h(12, g)) ; window.alert("h(12, f) : " + h(12, f)) ;
Fonctions : variable et affectation Voir Programmation Web 2013-2014 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <metahttp-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Les fonctions sont un type de variable</title> <scripttype='text/javascript'> // Au chargement complet du document window.onload = function(){ var bouton = document.forms['formu'].elements['btn'] ; bouton.onclick = function(){ window.alert('Click') ; } } </script> </head> <body> <formname='formu'> <inputtype='button'name='btn'value='Cliquez'> </form> </body> </html>
Portée des variables Programmation Web 2013-2014 • La portée des variables est liée aux fonctions et non aux blocs if, while, etc. • Les variables sont globales si • déclarées hors de toute fonction • déclarées dans une fonction SANS le mot clé var • Les variables sont locales à une fonction si • déclarées dans une fonction AVEC le mot clé var • Les variables sont accessibles • après la déclaration • après la première affectation
Portée des variables : illustration string string string undefined string string undefined number string undefined undefined undefined Voir Programmation Web 2013-2014 var a = 'contenu variable a' ; function f(){ b = 'contenu variable b' ; var c = 'contenu variable c' ; window.alert("Dans f() a est de type " + typeof a) ; window.alert("Dans f() b est de type " + typeof b) ; window.alert("Dans f() c est de type " + typeof c) ; window.alert("Dans f() i est de type " + typeof i) ; } function g(){ for(var i=0; i<1; i++){ document.write(i) ; } window.alert("Dans g() a est de type " + typeof a) ; window.alert("Dans g() b est de type " + typeof b) ; window.alert("Dans g() c est de type " + typeof c) ; window.alert("Dans g() i est de type " + typeof i) ; } window.alert("Au niveau global a est de type " + typeof a) ; window.alert("Au niveau global b est de type " + typeof b) ; window.alert("Au niveau global c est de type " + typeof c) ; window.alert("Au niveau global i est de type " + typeof i) ; f() ; g() ;
Fermetures (closures) Programmation Web 2013-2014 • Portée des variables d’une fonction étendue : • aux fonctions définies dans une fonction • aux fonctions définies dans les fonctions définies dans une fonction • aux fonctions définies dans les fonctions définies dans les fonctions définies dans une fonction • … • Une fonction peut accéder aux variables de son contexte et aux variables des contextes parents • La capture des variables se fait à la fin de l’appel de la fonction contenant les déclarations
Fermetures : exemple En global, a est undefinedDans f(), a est numberAvant g(), a vaut 12Dans g(), a est numberAprès g(), a vaut 13 Voir Programmation Web 2013-2014 function f(){ // Variable a locale à f() var a = 12 ; window.alert("Dans f(), a est " + typeof a) ; // Fonction g() définie dans la fonction f() function g(){ a++ ; // Incrémentation de a définie dans fonction f() window.alert("Dans g(), a est " + typeof a) ; } window.alert("Avant g(), a vaut " + a) ; g() ; window.alert("Après g(), a vaut " + a) ; } window.alert("En global, a est " + typeof a) ; f() ;
Fermetures et événements Programmation Web 2013-2014 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <metahttp-equiv="Content-Type"content="text/html; charset=utf-8"> <title>Fermetures et événements</title> <styletype='text/css'> #id_bouton1, #id_bouton2, #id_bouton3, #id_bouton4, #id_bouton5{ width : 15em ; display : block ; } </style> <scripttype='text/javascript'>/* Page suivante */</script> </head> <body> <inputid='id_bouton1'type='button'value='Appuyez'> <inputid='id_bouton2'type='button'value='Appuyez'> <inputid='id_bouton3'type='button'value='Appuyez'> <inputid='id_bouton4'type='button'value='Appuyez'> <inputid='id_bouton5'type='button'value='Appuyez'> </body> </html>
Fermetures et événements Voir Toutes les actions concernent le dernier bouton… Programmation Web 2013-2014 <scripttype='text/javascript'> window.onload = function(){ var secondes = 5 ; for(var i=1; i<6; i++){ var bouton = document.getElementById('id_bouton' + i) ; bouton.onclick = function(){ // Texte du bouton bouton.value = "Patientez " + secondes + " secondes" ; // Désactivation du bouton bouton.disabled = true ; // Mise en place d'un compte à rebours window.setTimeout( // Fonction à lancer à la fin du compte à rebours function(){ // Texte du bouton bouton.value = "Merci de votre attente" ; // Activation du bouton bouton.disabled = false ; }, secondes * 1000/* Attente de millisecondes */) ; }}} </script>
Fermetures et événements Voir Dans cette nouvelle version, les actions correspondent bien à chaque bouton ! Programmation Web 2013-2014 <scripttype='text/javascript'> function patienter(bouton, secondes){ bouton.onclick = function(){ // Texte du bouton bouton.value = "Patientez " + secondes + " secondes" ; // Désactivation du bouton bouton.disabled = true ; // Mise en place d'un compte à rebours window.setTimeout( // Fonction à lancer à la fin du compte à rebours function(){ // Texte du bouton bouton.value = "Merci de votre attente" ; // Activation du bouton bouton.disabled = false ; }, secondes * 1000/* Attente de millisecondes */) ; } } window.onload = function(){ for(var i = 1; i<6; i++){ var temps = 1 + Math.floor(Math.random()*5) ; patienter(document.getElementById('id_bouton' + i), temps) ; } } </script>
JSON (JavaScript Object Notation) • Format de structure de données • Utilise la syntaxe des objets JavaScript • {"menu": {"id": "file", "value": "File" "popup": {"item": [ {"value": "New" }, {"value": "Open"}, {"value": "Close"}] }}} • <menu id="file" value="File"> <popup> <item value="New" /> <item value="Open" /> <item value="Close" /> </popup></menu> Équivalent XML Programmation Web 2013-2014
JSON (JavaScript Object Notation) http://www.json.org/ • Deux structures : • Objet • {} • {chaîne : valeur} • {chaîne : valeur, chaîne : valeur, …} • Tableau • [] • [valeur] • [valeur, valeur, …] • Valeur : • chaîne|nombre|objet|tableau|true|false|null Programmation Web 2013-2014
JSON (JavaScript Object Notation) http://www.json.org/ • object • {} • { members } • members • pair • pair , members • pair • string : value • array • [] • [ elements ] • elements • value • value , elements • value • string • number • object • array • true • false • null • string • "" • " chars " • chars • char • char chars • char • any-Unicode-character-except-"-or-\-or-control-character • \" • \\ • \/ • \b • \f • \n • \r • \t • \u four-hex-digits Programmation Web 2013-2014
JSON (JavaScript Object Notation) http://www.json.org/ • number • int • int frac • intexp • int frac exp • int • digit • digit1-9 digits • - digit • - digit1-9 digits • frac • . digits • exp • edigits • digits • digitdigitdigits • e • e • e+ • e- • E • E+ • E- Programmation Web 2013-2014
JSON (JavaScript Object Notation) http://www.json.org/ Programmation Web 2013-2014
JSON (JavaScript Object Notation) http://www.json.org/ Programmation Web 2013-2014
JSON (JavaScript Object Notation) http://www.json.org/ Programmation Web 2013-2014
JSON (JavaScript Object Notation) http://www.json.org/ Programmation Web 2013-2014
Développement orienté objet Programmation Web 2013-2014 JavaScript est un langage orienté objet à base d’instances et non à base de classes (POO orientée prototype) Une instance peut être construite à partir d’une fonction constructeur this est initialisé par le constructeur pour faire référence à l’instance courante L’héritage dans la programmation objet orientée prototype se fait à base de clonage L’instance est composée de slots de données (les fonctions sont des données !)
Développement orienté objet : « attributs » Garfield a 4 pattes Odie a 4 pattes Programmation Web 2013-2014 Mon premier prototype : <scripttype='text/javascript'> function Animal(nb_pattes){ this.pattes = nb_pattes ; } ; vargarfield = new Animal(4) ; varodie = new Animal(4) ; window.alert("Garfield a " + garfield.pattes + " pattes<br>") ; window.alert("Odie a " + odie['pattes'] + " pattes<br>") ; </script>
Développement orienté objet : « attributs » Garfield a 4 pattes et aime les lasagnes Odie a 4 pattes et aime les os Programmation Web 2013-2014 <scripttype='text/javascript'> function Animal(nb_pattes){ this.pattes = nb_pattes ; } ; vargarfield = new Animal(4) ; garfield.aime = 'les lasagnes' ; varodie = new Animal(4) ; odie.aime = 'les os' ; window.alert("Garfield a " + garfield.pattes + " pattes et aime "+ garfield.aime + "<br>") ; window.alert("Odie a " + odie.pattes + " pattes et aime "+ odie.aime + "<br>") ; </script>
Développement orienté objet : « méthodes » Garfield a 4 pattes ZZZzzz... Odie a 4 pattes Programmation Web 2013-2014 <scripttype='text/javascript'> function Animal(nb_pattes){ this.pattes = nb_pattes ; this.dormir = function(){ return"ZZZzzz..." ; } } ; Chat.prototype = new Animal(4) ; function Chat(){ } ; Chien.prototype = new Animal(4) ; function Chien(){ } ; vargarfield = new Chat() ; varodie = new Chien() ; window.alert("Garfield a " + garfield.pattes + "<br>") ; window.alert("Garfield, au lit ! " + garfield.dormir() + "<br>") ; window.alert("Odie a " + odie.pattes + "<br>") ;
Développement orienté objet : « méthodes » ZZZzzz... ... Programmation Web 2013-2014 <scripttype='text/javascript'> function Animal(nb_pattes){ this.pattes = nb_pattes ; this.dormir = function(){return"ZZZzzz..." ; } } ; Chat.prototype = new Animal(4) ; function Chat(){} ; Chien.prototype = new Animal(4) ; function Chien(){ this.dormir = function(){return"..." ; } } ; vargarfield = new Chat() ; varodie = new Chien() ; window.alert("Garfield, au lit ! " + garfield.dormir() + "<br>") ; window.alert("Odie, au lit ! " + odie.dormir() + "<br>") ; </script>
Objets anonymes Garfield a 4 pattes Garfield aime le poisson Odie a 4 pattes Odie aime la viande Programmation Web 2013-2014 <scripttype='text/javascript'> function Animal(param){ this.pattes = param.pattes || 4 ; this.aime = param.aime || '?' ; } ; Chat.prototype = new Animal({pattes : 4, aime : 'le poisson'}) ; function Chat(){} ; Chien.prototype = new Animal({pattes : 4, aime : 'la viande'}) ; function Chien(){ } ; vargarfield = new Chat() ; varodie = new Chien() ; window.alert("Garfield a " + garfield.pattes + " pattes<br>") ; window.alert("Garfield aime " + garfield.aime + "<br>") ; window.alert("Odie a " + odie.pattes + " pattes<br>") ; window.alert("Odie aime " + odie.aime + "<br>") ; </script>
Outil indispensable : Firebug Programmation Web 2013-2014 • Module complémentaire de Firefox • Permet : • l’édition • le débogage • le suivi de tous les éléments constitutifs d’une page Web : • HTML • CSS • JavaScript • échanges HTTP • Traces JavaScript avec console.log(msg)
Outil indispensable : Firebug Programmation Web 2013-2014