Médina
lienPas mal
display
, marges et padding, etc.
Attention, Javascript :
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script> /* Code */ </script>
<title>Ma page</title>
</head>
<body>
...
<script> /* Autre code */ </script>
</body>
</html>
index_with_code.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script src="script1.js"></script>
<title>Ma page</title>
</head>
<body>
...
<script src="script2.js"></script>
</body>
</html>
index_with_file.html
<script>
src
de <script>
<script>
// Premier type de commentaire sur une seule ligne
/* Second type de commentaire sur plusieurs lignes.
* Seules les étoiles initiales et finales (après et
* avant les deux slashs) son nécessaires, les autres
* c'est de la décoration */
La syntaxe des commentaires est identique à celle de Java et C# :
//
/* */
/* Déclarer une variable
* avec var */
var a;
var b = 5;
var
est l’instruction la plus ancienne :
/* Déclarer une variable
* avec let */
let c;
let d = 5;
let
est une instruction plus récente :
var
/* Déclarer une constante
* avec const */
const E = 5;
const
permet de déclarer des constantes :
maVariable
et MaVariable
sont deux variables différentes !let a;
typeof a;
// "undefined"
let b = true;
typeof b;
// "boolean"
let c = 12;
typeof c;
// "number"
let d = 12.5;
typeof d;
// "number"
let e = 'W11';
typeof e;
// "string"
Attention au typage dynamique !
let a = 10; // a est un nombre
alert(typeof a); // affiche "number"
a = "dix"; // a est maintenant une chaîne
alert(typeof a); // affiche "string"
=
permet d’affecter des variables.
+
let a = 3+8; // 11
let b = 'W'+'11'; // W11
==
et !=
: comparateurs “faibles”let c = (5 == '5'); // Vrai
let d = (5 != '5'); // Faux
===
et !==
: comparateurs “stricts”let e = (5 === '5'); // Faux
let f = (5 !== '5'); // Vrai
// Déclarer un tableau
let tab1 = [ 11, 22 ];
let tab2= [ "W", 11, "A", 22 ];
// Taille d'un tableau
let size1 = tab1.length; // 2
// Accéder à un élément
let val1 = tab1[0]; // 11
// Modifier un élément
tab2[0] = "S";
// Indice d'un élément
let i = tab2.indexOf("A"); // 2
// Ajouter à la fin
tab1.push(33); // [ 11, 22, 33 ]
// Supprimer le dernier
tab1.pop(); // [ 11, 22 ]
// Supprimer le premier
tab1.shift(); // [ 22 ]
// Ajouter au début
tab1.unshift(33); // [ 33, 22 ]
// Trier
tab1.sort(); // [ 22, 33 ]
let moi = {
nom: 'Papeur',
prenom: 'Jé',
};
let lui = {};
lui.nom = 'peur';
lui.prenom = 'Ila';
lui.age = 20;
alert( moi.prenom ); // "Jé"
alert( lui['nom'] ); // "peur"
alert( lui.age ); // 20
Un objet Javascript :
property: value
.let moi = {
prenom: 'Julien',
age: 28,
frere: {
prenom: 'Mathieu',
age: 25
},
sports: [ 'Échecs', 'Curling' ]
};
alert( moi.prenom ); // "Julien"
alert( moi.frere.prenom ); // "Mathieu"
alert( moi.sports.length ); // 2
Une propriété d’un objet :
obj.property
ou obj['property']
let nom = prompt('Entrez votre nom :');
let classe = prompt('Entrez votre classe :');
alert('Bonjour ' + nom + '. Vous êtes un ' + classe);
let start = confirm("Souhaitez-vous démarrer l'aventure ?");
if (start) {
alert("C'est parti !");
}
alert()
let val = prompt()
null
en cas d’appui sur le bouton “Annuler”.
let val = confirm()
<html>
<head>
<title>Mon titre</title>
</head>
<body>
<h1>Mon titre</h1>
<a href="#">Lien</a>
</body>
</html>
Le Document Object Model est une représentation arborescente d’un document HTML qui peut être manipulé pour :
<html>
<head>
<title>Mon titre</title>
</head>
<body>
<h1>Mon titre</h1>
<a href="#">Lien</a>
</body>
</html>
let elem = document.getElementById('monId');
Retourne l’unique élément d’identifiant monId
.
let elems = document.getElementsByTagName('a');
Retourne un tableau contenant tous les éléments de type <a>
.
let elems = document.getElementsByClassName('recent');
Retourne un tableau contenant tous les éléments de classe recent
.
let elem = document.querySelector('article > h3');
Retourne le 1\(^{er}\) élément correspondant au sélecteur CSS article > h3
.
let elems = document.querySelectorAll('article > h3');
Retourne tous les éléments correspondant au sélecteur article > h3
.
La classe Element
propose plusieurs méthodes pour accéder aux éléments relatifs à l’élément courant.
let p = document.querySelector('.recent');
// Le parent de p
let body = p.parentElement;
// Les enfants de p
let childs = p.childNodes;
// Le premier enfant de p
let h3 = p.firstElementChild;
// Le voisin direct de p
let a = p.nextElementSibling;
document.querySelector('.recent')
parentElement
childNodes
firstElementChild
nextElementSibling
<article class="recent">
<h3>Médina</h3>
<a href="m.html">lien</a>
<p id="i">Pas mal</p>
</article>
let url = document.querySelector('a').href;
let id = document.querySelector('p').id;
Pas mal
On accède à la valeur de l’attribut att
d’un élément HTML elem
avec la notation elem.att
.
<article class="recent">
<h3>Médina</h3>
<a href="m.html">lien</a>
<p id="i">Pas mal</p>
</article>
let p = document.getElementById('i');
p.classList.add('droite','vert');
p.classList.remove('droite');
p.classList.toggle('vert');
Le membre classList
de la class Element
permet de manipuler les classes d’un élément, notamment :
add( String [, String])
remove( String [, String])
toggle(String)
<article class="recent">
<h3>Médina</h3>
<a href="m.html">lien</a>
<p id="i">Pas mal</p>
</article>
let p = document.getElementById('i');
p.innerHTML = "Incroyable !";
p.innerHTML = "<a href='t.html'>lien 2</a>";
Pas mal
Le membre innerHTML
de la class Element
donne un accès direct en écriture au contenu de l’élément qui peut être :
<article class="recent">
<h3>Médina</h3>
<a href="m.html">lien</a>
<p id="i">Pas mal</p>
</article>
let ar = document.getElementsByTagName('article')[0];
let p = document.createElement("p");
p.innerHTML = "Incroyable !";
ar.appendChild(p); // Ajout
let last = ar.lastElementChild;
ar.removeChild(last); // Suppression
Pas mal
document.createElement(tagName)
elemA.appendChild(elemB)
elemB
comme enfant de elemA
elemA.removeChild(elemB)
elemB
des enfants de elemA
.
Event
Elle représente n’importe quel événement survenu lors de l’interaction de l’utilisateur avec le DOM. Tous les événements sont notifiés au DOM et JavaScript permet :
function changeColor(event) {
event.preventDefault();
let a = event.target;
a.style.color = 'green';
}
let h = document.getElementsByTagName('h3')[0];
h.addEventListener('click', changeColor);
h.nextElementSibling
.addEventListener('mouseover', changeColor);
<article class="recent">
<h3>Médina</h3>
<a href="m.html">lien</a>
<p id="i">Pas mal</p>
</article>
Pas mal
Pour tester, cliquer sur “Médina” et survoler “lien”.
Tous les Element
possèdent la fonction addEventListener
à laquelle on passe deux paramètres obligatoires :
addEventListerner
prend un paramètre de type Event
qui contient des informations sur l’événement déclenché.preventDefault()
permet d’empêcher l’exécution du comportement par défaut de l’élément HTML associé à cet événement.Une requête asynchrone :
fetch( URL ).then( fonction1 ).then( fonction2 ).catch( fonctionErreur );
fetch( URL )
.then( function (response) { /* Exécuté lorsque l'on reçoit la réponse */ })
.then( function (data) { /* Exécuté lorsque le 1er then est terminé */ })
.catch( function (error) {
// Exécuté lorsqu'une exception est
// déclenchée dans l' un des blocs fetch
// ou then.
});
Fetch permet d’effectuer des traitements asynchrones en cascade :
fetch()
envoie une requête HTTP et transmet la réponse.then
exécute une fonction dont l’argument correspond au à la valeur de retour du bloc précédent.catch
est exécuté lorsqu’une erreur survient dans l’un des blocs précédents.fetch('http://monsite.fr/api/?s=bond')
.then( function (response) {
if (response.ok)
return response.json();
throw new Error('Response is not OK');
})
.then( function (data) {
doSomething(data);
})
.catch( function (error) {
console.log(error.message);
});
// Contenu de la réponse au format JSON
{
'nom': 'Bond',
'prenom': 'James',
'age': 35
}
function doSomething(data) {
const p = document.querySelector('#p');
p.innerHTML = `
Vous êtes ${data.prenom} ${data.nom}.
Vous avez ${data.age} ans.`;
}
Le retour de fetch
est de type Response
et permet :
ok
.status
de la réponse HTTP (200, 400, etc.)..json()
et .text()
.