Chap3 JS
Chap3 JS
Partie 3 : JavaScript
2
Plan de la présentation
Introduction à JavaScript
Core JavaScript
Client-side JavaScript
3
Introduction
Interagir
Manipuler les avec les
événements éléments Valider les formulaires
HTML web côté client
Introduction
4
Introduction Introduction
Des jeux exploitants la balise <canvas> : Un lecteur de vidéos ou de musiques grâce aux
Torus; Tetris en 3D ; modélisation 3D d’une balises <video> et <audio>
Lamborghini affichée grâce à l'API WebGL et à la
bibliothèque Three.js 5
Introduction à JavaScript Introduction à JavaScript
6
Introduction à JavaScript Un peu d’histoire…
pages WEB.
Exécuté sur vos machine donc côté Client.
L’un des langages WEB les plus utiles et membre du
fameux triplet :
HTML pour le contenu
CSS pour la présentation
JS pour le comportement
JavaScript est:
Haut niveau
Dynamique
Non typé
Interprété
Compilé vs Interprété
Compilation
Introduction à JavaScript
Interprétation
Introduction à JavaScript
Operateurs et Expressions
Structures conditionnelles et itératives
Les Fonctions
Les Tableaux
Les Objets
La structure lexicale de JavaScript
Identifiants
Doit commencer par une lettre, par (_) ou par le signe dollar ($)
Le reste des lettres, chiffres, (_), ou $
Core JavaScript
Certains sont moins utilisés mais peuvent l’être plus dans les futurs
versions
class const enum export extends import super
Dates et Times
(ne marche pas dans les internet explorer <10). Cette fonction
retourne un id qui identifie la fonction pour pouvoir l’annuler avec la
fonction clearTimout.
setInterval( execFunction, intervalTime, param1,param2,…,paramN)
est une fonction qui permet d’exécuter la fonction execFunction tout
les intervalTime milliseconde à partir de son appel. Les paramètres
param1, paramN sont les paramètres que nous voulons passer à
execFunction (ne marche pas dans les internet explorer <10).
Si La version est inférieur à explorer 10 il suffit d’utiliser une fonction
anonyme et dans laquelle on appellera la fonction execFunction. Cette
fonction retourne un id qui identifie la fonction pour pouvoir l’annuler
avec la fonction clearInterval.
Dates et Times
function testTimout() {
setTimeout(function () {
console.log('Je test le Timout');
},2000);
}
Core JavaScript
testTimout();var i=0;
testInterval();
function testInterval() {
var code =setInterval(function () {
if(i<22)
{
console.log(i);
i++
}
else{
clearInterval(code);
}
},100,code);
}
Chaines
valeur undefined.
La portée (scope) d’une variable est l’emplacement dans lequel elle est
définie.
Variables globales : ce sont les variables définies dans tout le script JS.
Variables locales
Core JavaScript
script JS.
Variables locales
Déclarées dans le corps d’une fonction
Définit dans une fonction ou dans n’importe quelle fonction
functiondéfinie
test(o) { à l’intérieur de celle-ci.
var i = 0; // i est défini dans la fonction
Lorsque vous définissez une variable en tant qu’objet vous obtenez la référence.
Ceci implique que si c’est une constante c’est la référence qui doit rester
constante et non l’objet sur laquelle elle réfère.
Les tableaux
monArray =[ ];
monArray =[1+2,3+4]; // 3, 7
var matrice = [[1,2,3], [4,5,6], [7,8,9]];
var eparseArray = [1,,,,5]; // eparseArray[1]==undefined;
var t = new Array(1,2,3) var t=[1,2,3]
Les tableaux
}
function comparerDesNombres(a,b){
var x=parseInt(a,10);var y=parseInt(b,10);
if(x>y){
return 1;
}else if(y>x){
return -1;
}return 0;
}
var t=[1,2,3,11,22,33];
t.sort(comparerDesNombres);
Les tableaux
Plusieurs méthodes sont offertes avec les tableaux afin de faciliter leur
utilisation.
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array#m%C3%A9thodes
Les tableaux
console.log(Array.from('foo'));
// expected output: Array ["f", "o", "o"]
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/from
Les tableaux
La méthode every() permet de tester si tous les
éléments d'un tableau vérifient une condition donnée
par une fonction en argument. Cette méthode renvoie
Core JavaScript
console.log(array1.every(isBelowThreshold));
// expected output: true
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/every
Les tableaux
console.log(result);
// expected output: Array ["exuberant", "destruction", "presen
t"]
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/filter
Les tableaux
console.log(found);
// expected output: 12
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/find
Les tableaux
console.log(map1);
// expected output: Array [2, 8, 18, 32]
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/map
Les tableaux
La méthode reduce() et reduceRight() applique une
fonction sur un accumulateur et sur chaque valeur du
tableau (de gauche à droite et de droite à gauche) de
Core JavaScript
console.log(
array1.reduce(
(accumulateur, currentVal) => accumulateur + currentVal
)
);
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/map
Les objets : Valeurs primitives vs Objets
Primitives:
undefined, null, boolean, numériques, et strings
Immutable : leur allocation de mémoire initiale ne
Core JavaScript
change jamais
Sont comparées par valeur
Objets :
Tout le reste: objets, tableaux et fonctions
Mutable: leur mémoire peut changer dynamiquement
Sont comparés par référence
Les objets
Un objet est une valeur composite
C’est une collection de propriétés désordonnée, chacune
avec un nom et une valeur et qui peuvent être:
Des Attributs
Core JavaScript
Des Méthodes
Les propriétés peuvent être ajoutés dynamiquement
Trois types d’objets :
Objet Native: défini par la spécification ECMAScript (Arrays,
fonctions, dates)
Objet Hôte: défini par l’environnement hôte (e.g. navigateur)
dans lequel l’interpréteur est embarqué, i.e. HTMLElement dans
le JS coté client.
Object défini par l’utilisateur : objet crée par l’exécution du
code JS.
Le modèle objet JS : Les prototypes
Un langage basée sur les prototypes ne possède (généralement) que
des objets.
Parmi ces objets il peut y avoir des objets prototypes agissant
comme un modèle permettant ainsi s’avoir des propriétés et des
Core JavaScript
classes et instances sont deux entités distinctes. Tous les objets sont des instances.
Une classe est définie avec une définition de On définit et on crée un ensemble d’objets
classe. On instancie une classe avec des avec des fonctions qui sont des
Core JavaScript
si : }
surname: "Flanagan"
Il inclut un espace };
C’est un mot réservé // Avec l’opérateur new
var o = new Object();
Avec l’opérateur new var a = new Array();
var d = new Date();
new doit être suivi du var r = new RegExp("js");
constructeur // Avec Object.create()
Avec Object.create() var o1 = Object.create({x:1, y:2});
var o2 = Object.create(null);
Crée un nouvel objet en var o3 = Object.create(Object.prototype);
utilisant le premier argument var o4 = Object.create(o1);
//Exemple constructeur
comme prototype de l’objet function Personne(nom,prenom){
this.nom=nom;
this.prenom=prenom;
this.affiche =function() {
console.log(this.nom+this.prenom);
}
}
Les objets : Création
// ES5
const monObjetES5 = {
maMethode1: function () {
console.log("hello");
},
maMethode2: function (arg1, arg2) {
Core JavaScript
console.log(arg2);
},
};
// Equivalent ES6
const monObjet = {
maMethode1() {
console.log("hello");
},
maMethode2(arg1, arg2) {
console.log(arg2);
},
};
monObjet.maMethode1();
// => "hello"
monObjet.maMethode2("banana", true);
Les objets : Création
Les valeurs implicites par
homonyme
Lorsque le nom de la variable
est le même que le nom de la
propriété de votre objet, il
Core JavaScript
Sérialisation d’Object
C’est le processus de transformation d’un objet en une
chaine de caractère et qui peut être récupérée
Core JavaScript
ultérieurement.
2 fonctions :
JSON.stringify(objet) : retourne une chaine
JSON.parse(objet) : restore l’objet partir de la chaine JSON
o = {x:1, y:{z:[false,null,""]}};
s = JSON.stringify(o); // s : '{"x":1,"y":{"z":[false,null,""]}}'
p = JSON.parse(s); // p est une copie de o
Les Fonctions
C’est un objet « spécial »
Vous pouvez lui ajouter des propriétés et invoquer des méthodes.
C’est un bloc JS défini une fois mais qui peut être exécuté à volonté.
Paramétrable :
Core JavaScript
// return 8 // return 3
/************************************/ /************************************/
un tableau.
Les Fonctions
() => { /* Instructions */ };
console.log(this.kilometres);
setTimeout(function () {
console.log(this);
this.kilometres += 10;
console.log(this.kilometres);
}, 1000);
}
new Voiture();
ES6 : Les Fonctions fléchées Avantages
L’un des avantages majeurs de l’utilisation des fonctions
fléchés est la notion de this lexical et non local.
function Voiture() { function Voiture() {
var self = this; this.kilometres = 100;
Core JavaScript
console.log(this.kilometres);
setTimeout(() => {
console.log("this", this);
this.kilometres += 10;
console.log(this.kilometres);
}, 1000);
}
new Voiture();
Les Fonctions (callback function)
// propriétés
this.nom = nom;
this.age = age;
// méthode
this.log = function () {
console.log(this.nom + " a " + this.age + " ans.");
};
}
var aymenSellaouti = new creerPersonne("Aymen Sellaouti", 38);
aymenSellaouti.log();
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Classes
Les Classes (ES6)
Syntaxe
class Personne {
constructor(nom, age) {
Core JavaScript
// propriétés
this.nom = nom;
this.age = age;
// méthode
this.log = function () {
console.log(this.nom + " a " + this.age + " ans.");
};
}
}
const aymen = new Personne("aymen", 38);
aymen.log();
Les Classes : Héritage (ES6)
class Admin extends Personne {
Pour faire de constructor(nom, age, email, password) {
super(nom, age);
l’héritage, utiliser le this.email = email;
this.password = password;
mot clé extends. }
Core JavaScript
log() {
Pour référencer le super.log();
console.log("cc");
parent utiliser le mot }
console.log(`mon email est : ${this.email}`);
clé super }
const admin = new Admin(
"aymen sellaouti",
38,
"[email protected]",
"123456"
);
admin.log();
Les Classes : getter et setter (ES6)
class Admin extends Personne {
Pour les getter et setter ajouter les constructor(nom, age, email, password) {
super(nom, age);
mot clé get et set devant la this._email = email;
méthode au nom de la propriété. this.password = password;
}
Attention, si vous écrivez set get email() {
return `L'email est : ${this._email}`;
email(email){this.email = email }, }
Core JavaScript
set email(email) {
vous allez déclencher une boucle if (email.includes("@")) {
infinie this._email = email;
} else {
En effet, puisque vous déclenchez }
console.log("email must contain @");
}
vous devez passer par la classe. static status = 1;
static whoIAm()
console.log("I am an admin");
}
}
const admin = new Admin(
"aymen sellaouti",
38,
"[email protected]",
"123456"
);
admin.log();
admin.email = "newEmail";
admin.log();
Admin.whoIAm();
console.log(Admin.status);
ES6 déstructuration (destructuring)
La déstructuration permet de définir des variables depuis
un tableau ou un objet en utilisant de la mise en
correspondance (matching) et plus particulièrement de la
correspondance de motifs ( pattern matching)
Core JavaScript
console.log(a, b, c, d);
// => un, deux, trois, quatre
var { a, b, c} = newObject;
console.log(a, b, c);
Afin de gérer ses deux structures d’une façon plus fluide deux
Core JavaScript
Set
Map
ES6 Les collections (Set)
Un Set est un objet permettant de stocker un ensemble de
valeurs, quelle qu'elle soit comme un tableau.
La différence est que le Set va garantir l’unicité des éléments.
Si vous ajouter un élément déjà existant dans le Set, celle-ci ne
Core JavaScript
maCollection.add(38);
console.log('Taille de ma collection',maCollection.size);
maCollection.delete(38);
console.log('Taille de ma collection',maCollection.size);
console.log('est ce que maCollection a la valeur 38', maCollection.
has(38));
ES6 Les dictionnaires (Map)
Le paramètre valeurs passé peut être tout objet itérable.
Un Map est un objet permettant destocker des valeurs indexées
par un clé unique, on peut le considérer comme un dictionnaire.
Contrairement à un Objet où les noms de propriétés doivent être
Core JavaScript
des chaînes, les clé et les valeurs d'un Map peuvent être de
n’importe quel type.
Pour créer un map instancier l’objet Map.
Pour ajouter un élément utiliser la méthode set.
Pour récupérer un élément utiliser la méthode get.
Pour supprimer un élément utiliser la méthode delete.
Pour vérifier l’existence d’un élément utiliser la méthode has.
Pour récupérer la taille d’un Set utiliser l’attribut size.
Core JavaScript ES6 Les dictionnaires (Map)
ES6 Les promesses (Promise)
Une promesse est un objet (Promise) qui représente la complétion
ou l'échec d'une opération asynchrone.
Le fonctionnement des promesses est le suivant :
On crée une promesse en instanciant un objet de
Core JavaScript
Promise.
Le constructeur prend en paramètre deux callbacks
qui sont resolve et reject.
La promesse va toujours retourner deux résultats :
resolve en cas de succès
reject en cas d’erreur
Vous devrez donc gérer les deux cas afin de créer
votre traitement
ES6 Les promesses (Promise)
Pour consommer la promesse, vous avez deux méthodes à gérer :
then en cas de succès et qui prend en paramètre les données passée à la
méthode resolve.
catch en cas d’erreur et qui récupère un objet error.
Core JavaScript
https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Using_promises
ES6 Les promesses (Promise)
La méthode then retourne à son tour une Promise.
Ceci nous permet de chainer les fonctions dépendantes les une
des autres.
Core JavaScript
faireQqc().then(function(result) {
return faireAutreChose(result);
})
.then(function(newResult) {
return faireUnTroisiemeTruc(newResult);
})
.then(function(finalResult) {
console.log('Résultat final : ' + finalResult);
})
.catch(failureCallback);
https://developer.mozilla.org/fr/docs/Web/JavaScript/Guide/Using_promises
ES6 await async
Afin d’éviter les successions de then des promesses pour gérer les fonctions
asynchrones, vous pouvez utiliser les mots clés async et await.
En précédent une fonction avec le mot clé async, vous spécifier que votre
méthode est asynchrone.
Si vous souhaiter que dans cette fonction il y a un traitement asynchrone et que
Core JavaScript
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Statements/async_function
Intégrer le Js avec votre page HTML
Afin d’intégrer votre code JS avec votre page HTML, deux méthodes peuvent être
appliquées :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
console.log('Bonjour je suis un
script non portable je ne sert qu\'ici
:(');
</script>
</head>
<body>
</body>
</html>
</head>
<body> console.log('Bonjour je suis un script
<script src=‘app.js’></script> libre liiiiiiiiibre vous avez besoin de
</body> moi il suffit de m’appeler :D');
</html>
first.html app.js
89
Le DOM
Le Document Object Model (DOM) représente une API pour les documents
HTML et XML permettant leur manipulation.
L’objet document est un sous-objet de window c’est son fils. Il représente la page
Web et permet de pointer ou d’accéder à la balise HTMl.
90
Le DOM
html est le parent direct
title est l'unique enfant de head et de body, ses
de head deux enfants
<html>
Client Side
<head>
<title>Titre du document</title>
</head>
<body>
<h1>Titre</h1>
<p>Un peu de texte</p>
</body>
</html>
h1 est le premier
enfant de body
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
Client Side
<body>
<div>
<p>Un peu de texte
<a>et un lien</a>
</p>
</div>
</body>
</html>
92
Les différents types des objets du DOM
Node : C’est le type le plus générique, tous les éléments du DOM sont des Nodes.
93
Quelques fonctions de Window
94
Héritage dans le DOM
Tous les éléments du DOM sont des objets ce qui implique qu’ils contiennent
tous leurs propres méthodes et des attributs.
Ils existent des méthodes et attributs communs à l’ensemble des objets. Ceci est
dû au fait que l’ensemble des éléments sont tous du même type : les nœuds
(Node).
L’aspect d’héritage entre les différents types d’éléments permet d’avoir les
éléments en commun.
Client Side
Node
Element
HTMLElement
HTMLDivElement
95
Manipulation des éléments
Pour accéder aux éléments HTML en utilisant le DOM, l’objet document offre
plusieurs méthodes :
</div>
<div class="Pub"> console.log('ce que me donne querySelector
<span>Pub 1</span> : '+ queryselector.textContent);
<span>Pub 2</span> console.log('Ce que donne le
</div> querySelectorAll : ');
</div> for(var
<div id="content"> i=0;i<queryselectorAll.length;i++){
<span>Ici je vais mettre mon
contenu</span> console.log(queryselectorAll[i].textConten
</div> t);
Un formulaire bizar pour tester }
getElementsByName() :
<form name="monNom"> test1.js
<input type="password" name="monNom">
<input>
<button name="monNom"></button>
</form>
<script src="test1.js"></script>
</body>
</html>
test.html 99
Client Side Manipulation des éléments : Exemple
100
Manipulation des éléments
Pour accéder à la liste des classes CSS définies dans l'attribut class d'un élément
nous utilisons className qui retourne la liste des classes associées à l’élément
en question dans une chaine de caractère ou les classes sont séparées par des
Client Side
espaces.
101
Manipulation des éléments
Afin de lire, de créer ou de modifier un attribut d’un « Element » du DOM,
l’objet Element met votre disposition deux méthodes
getAttribute() qui comme son nom l’indique permet de récupérer la valeur
d’un attribut.
setAttribute() qui permet de la modifier
Exemple :
Client Side
102
Client Side Manipulation des éléments
103
Console
Manipulation des éléments
La deuxième méthode mais qui n’est pas appliquée sur la totalité des
navigateurs est d’accéder directement en utilisant le nom de l’attribut
Dans notre exemple le getAttribut(«href») est remplacé par.href. Le
setAttribut est lui remplacé par lautreLien.href="newLien.tn"
Client Side
var lautreLien=document.getElementById("lautrelien");
alert(lautreLien.href);
lautreLien.href="newLien.tn"
test2.js
104
Manipulation le texte des balises
innerHTML : permet de récupérer du code html enfant d’une balise.
textContent (dans sa version standard et innerText qui n’est pas supporté par
tous les navigateurs) permet de faire le même travail que innerHTML sauf qu’elle
Client Side
console
106
Quelques méthodes utiles
Il existe quelques méthodes très utiles qui renseigne sur les éléments du DOM
8 commentaire
107
Se déplacer dans le DOM
nextSibling permet d’accéder au nœud suivant donc au frère suivant d’un nœud
108
Se déplacer dans le DOM
<!doctype html> var nod=document.getElementById("para");
<html> console.log("Bonjour je suis le noeud
<head> "+nod.nodeName) ;
<meta charset="utf-8" /> console.log("Pour visualiser la différence
<title>Ma page de Test </title> entre firstChild et firstElementChild ");
</head> console.log("bonjour je suis le first child
<body> : "+nod.firstChild);
console.log("bonjour je suis le first
<p id="para">vous allez trouvez mon Cv <a Elementchild : "+nod.firstElementChild);
Client Side
id="lelien" href="www.monCv.tn">ici</a>.
Veuillez le consulter et appeler moi au
<i>222222</i> pour plus de détails</p> test6.js
<div id="monMenu">
<div id="item">
<span>menu 1</span>
<span>menu 2</span>
</div>
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="test6.js">
</script>
</body>
</html>
console
Element.html 109
Se déplacer dans le DOM
Plusieurs propriétés sont offertes permettant le déplacement dans le DOM.
Ces propriétés permettent à partir d’un nœud d’accéder à son père, ou à ses
enfants.
firstChild permet, comme son nom l’indique, à partir d’un élément, d’accéder au
premier enfant d’un noeud.
lastChild permet, comme son nom l’indique, à partir d’un élément, d’accéder au
dernier enfant d’un noeud.
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="test7.js">
</script>
</body>
</html>
Element.html console 111
Mise à jour du DOM : Ajout d’un élément
Afin d’ajouter un nœud dans le DOM il faut généralement suivre les étapes
suivantes :
Récupérer ou créer l’élément à ajouter. Pour le créer, on utilise la méthode de
l’objet document createElement() qui prend en paramètre une chaine
contenant le nom de l’élément à créer.
Décorer l’élément avec les attributs nécessaires en utilisant l’une des deux
Client Side
<div id="monMenu">
<div id="item">
<span>menu 1</span>
<span>menu 2</span>
</div>
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="test8.js">
</script>
</body>
</html>
Element.html console
113
Mise à jour du DOM : Cloner un élément
document.body.appendChild(falseClonedNode);
<i>222222</i> pour plus de détails</p>
test9.js
<div id="monMenu">
<div id="item">
<span>menu 1</span>
<span>menu 2</span>
</div>
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="test9.js">
</script>
</body>
</html>
Element.html 115
Mise à jour du DOM : exemple clone
var nod=document.getElementById("para");
<!doctype html> var newNode=document.createElement("img");
<html> newNode.id="asimg";
<head> newNode.src="as.jpg";
<meta charset="utf-8" /> newNode.alt="Je suis l'image de aymen";
<title>Ma page de Test </title> newNode.width="50";
</head> newNode.height="50";
<body> nod.appendChild(newNode);
var trueClonedNode = nod.cloneNode(true);
<p id="para">vous allez trouvez mon Cv <a var falseClonedNode = nod.cloneNode(false);
id="lelien" href="www.monCv.tn">ici</a>. document.body.appendChild(trueClonedNode);
Veuillez le consulter et appeler moi au
Client Side
document.body.appendChild(falseClonedNode);
<i>222222</i> pour plus de détails</p>
test9.js
<div id="monMenu">
<div id="item">
<span>menu 1</span>
<span>menu 2</span>
</div>
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="test9.js">
</script>
</body>
</html>
Element.html console
116
Mise à jour du DOM : Supprimer un élément
Comment faire pour supprimer le premier span d’un menu d’un div d’id item ?
Mise à jour du DOM : exemple remove
<!doctype html> var nod=document.getElementById("item");
<html> nod.removeChild(nod.firstElementChild);
<head>
<meta charset="utf-8" /> test10.js
<title>Ma page de Test
</title>
</head>
<body>
href="www.monCv.tn">ici</a>. Veuillez le
consulter et appeler moi au
<i>222222</i> pour plus de détails</p>
<div id="monMenu">
<div id="item">
<span>menu 1</span>
<span>menu 2</span>
</div>
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="test10.js"> console
</script>
</body>
</html> Element.html 118
Mise à jour du DOM : remplacer un élément
Afin de remplacer un nœud dans le DOM par un autre il suffit d’appeler la méthode
replaceChild() partir du nœud pére.
<head>
<meta charset="utf-8" />
<title>Ma page de Test </title>
</head>
<body>
<p id="para">vous allez trouvez mon Cv <a id="lelien" href="www.monCv.tn">ici</a>. Veuillez le consulter
et appeler moi au <i>222222</i> pour plus de détails</p>
<div id="monMenu">
<div id="item">
<span>menu 1</span>
<span>menu 2</span>
</div>
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="test10.js">
</script>
</body>
</html>
Mise à jour du DOM : exemple replace
<!doctype html> var nod=document.getElementById("item");
<html> var
<head> newnod=document.getElementsByClassName("Pub")[0].cloneN
<meta charset="utf-8" /> ode(true);
<title>Ma page de Test nod.replaceChild(newnod,nod.lastElementChild);
</title>
</head> test11.js
<body>
href="www.monCv.tn">ici</a>. Veuillez le
consulter et appeler moi au
<i>222222</i> pour plus de détails</p>
<div id="monMenu">
<div id="item">
<span>menu 1</span>
<span>menu 2</span>
</div>
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="test11.js">
</script>
</body> console 120
</html> Element.html
Manipulation du CSS
JavaScript permet aussi de manipuler et de gérer l’apparence des éléments HTML.
La base de la manipulation des CSS par JavaScript est l’aspect CASCADE qui indique
Client Side
que les règles de styles qui sont appliquées à un élément du document HTML
peuvent venir d’une cascade de différentes sources dont la plus prioritaire est
l’attribut style d’un élément HTML individuel.
Style étant la propriété la plus prioritaire, c’est elle qui sera la plus utilisée.
Manipulation du CSS : La propriété style
Pour accéder à la propriété style :
NotreElement.style
Pour ajouter ou modifier une des propriétés de style
NotreElement.style.propriété
var nod=document.getElementById("item");
…Exemple : nod.style.backgroundColor="blue";
<div id="monMenu">
<div id="item"> test12.js
Client Side
<span>
menu 1
</span>
<span>
menu 2
</span>
</div>
<div class="Pub">
<span>Pub 1</span>
<span>Pub 2</span>
</div>
</div>
<script src="test12.js">
</script>
</body>
</html>
Element.html
Pour afficher une propriété ?
Manipulation du CSS : getComputedStyle
Pour accéder à une des propriétés des feuilles de styles il faut utiliser la méthode
getComputedStyle()
Client Side
Cette méthode récupère les style CSS associés à un Element HTML qu’elle soient
dans l’attribut style, dans un bloc style ou dans une feuille de style.
La valeur de retour est un objet contenant l’ensemble des styles, donc pour accéder
à un style en particulier il faut utiliser le nom de cette propriété.
Manipulation du CSS : getComputedStyle
<!doctype html> var nod=document.getElementById("item");
<html> console.log("je suis l'objet "+ nod.nodeName + "voila
<head>
mes attributs : ");
<meta charset="utf-8" />
<title>Ma page de Test </title> var mesStyles=getComputedStyle(nod);
<link href="css/test.css" console.log("ma taille est : "+mesStyles.width+" et "+
rel="stylesheet" type="text/css"> mesStyles.height);
</head> console.log("La couleur de mon arrière plan est :
<body>
"+mesStyles.backgroundColor+" et la couleur de
<p id="para">vous allez trouvez mon Cv
<a id="lelien" l'écriture est "+ mesStyles.color);
href="www.monCv.tn">ici</a>. Veuillez le for(myStyle in mesStyles){
consulter et appeler moi au console.log(myStyle);
Client Side
126
Gestion des événements
Lors de l’activation du lien, un <html>
<body>
événement click va être crée. <p>
<a href="http://www.JS.com/">
L’événement entame sa L’ Evenement
</a> de l’année
propagation (phase de capture)
</p>
du document vers le nœud qui </body>
précède la cible qui est ici le </html>
Client Side
nœud a.
Document
L’événement atteint sa cible (le
nœud a) <html>
En utilisant le DOM
En utilisant l’ancienne méthode (DOM-0), ceci est fait en affectant à l’attribut
onevent de l’élément à traiter la fonction à exécuter.
129
Gestion des évènements : DOM-2
La détection des événement sera réalisée à travers la méthode
addEventListner()
Un booléen (False par défaut) qui permet de spécifier quelle phase utiliser
False : Phase de bouillonnement y inclut la cible
True : Phase de capture
Dans le cas d’une Phase de capture l’élément le plus profond est le dernier à
s’exécuter.
130
Gestion des évènements : L’objet Event
L’objet Event permet de récupérer des information sur l’événement
déclenché
N’est récupérable que dans une fonction associé à un événement
Nod.addEventListner(‘click’,f(e){alert( e );})
Tester ce code et vérifier le contenu de l’objet event dans la console
Client Side
var nod=document.getElementById("item");
nod.addEventListener('click',function (e) {
console.log(e);
console.log('Bonjour je suis l\'objet'+
this.nodeName+'et mon contenu est : '+this.innerHTML);
});
L’une des méthodes la plus utilisée est preventDefault()qui permet
d’annuler l’événement par exemple bloquer l’envoi d’un formulaire
Maintenant et selon votre besoin utiliser et étudier ces propriétés.
131
Introduction
Sortie en 2015
Noms : ES6 – ECMAScript6 – ECMAScript2015 – Harmony
Plusieurs nouveautés :
Arrow Functions
ES6
132
Les fonctions fléchées ( Arrow Functions)
Sortie en 2015
Noms : ES6 – ECMAScript6 – ECMAScript2015 – Harmony
Plusieurs nouveautés :
Arrow Functions
ES6
133
Références
134