Chapitre 4 - Javascript
Chapitre 4 - Javascript
Chapitre 4 - Javascript
+Le DOM (Document Object Model) : objet global représentant l'ensemble de la page HTML
Javascript actuellement affiché par le navigateur sous forme d'un arbre dont la racine est l'objet « document ».
Dans cette partie du cours, on s'intéresse à un langage qui permet de programmer dans le
navigateur ! En effet, le langage javascript est un langage coté client, ie il s'exécute dans le client 3. Le DOM
Web pas sur le serveur. Le DOM est une API qui permet d'accéder aux éléments HTML,
-d'en sélectionner des portions, de les modifier
-de modifier les propriétés CSS
1. Introduction -d'accéder au contenu texte des éléments HTML
En pratique c'est un arbre dont la racine est l'objet document, et les noeuds sont les balises de la
Le javascript est un langage interprété, qui ne donne pas lieu au processus habituel de page HTML représentée. Chaque balise de la page HTML est représentée par un noeud dans le
compilation/Edition de lien. L'avantage est qu'il n'est pas nécessaire de compiler/distribuer pour DOM. La balise fille 'BFille' contenue dans une la balise parente 'Bparent' dans la page HTML sera
chaque navigateur/système d'exploitation/processeur client. A la place, on a besoin juste d'un représentée dans le DOM par un objet OBFille dont le parent est l'objet OBParent qui représente la
interpréteur. Ce rôle est rempli par un composant du client HTTP, appelé moteur Javascript. balise Bparent. Les attributs HTML d'une balise deviennent de fait des attributs membres de l'objet
Les moteurs Javascript les plus connus sont (Carakan utilisé par Opéra), V8 de Google (utilisé par la représentant dans le DOM. Ainsi, l'objet head devient un objet fils de l'objet document ainsi que
Opéra 15+ et Google Chrome), Chakra (utilisé dans Internet Explorer), SpiderMonkey (utilisé dans l'objet body.
Firefox et toutes les applications Mozilla basée sur Geko) et JavaScriptCore (utilisé dans Safari). On peut parcourir les enfants de tout objet dans le DOM par des méthodes JS prédéfénie : firstChild
renvoie la référence du premier enfant d'un noeud, lastChild renvoie quant à elle la référence du
Javascript est un langage qui a été crée en 1995 par Brandan Eich de Netscape Communications et dernier objet fils. La liste des enfants directs est disponible dans une table/liste childNodes[i] où i
utilisé dans le navigateur « Netscape Navigator » puis dans Firefox (le successeur de Netscape dans [0..n] et n = childNodes.length()-1. On peut aussi connaître la référence du parent d'un noeud
Navigator). Aujourd'hui c'est le nom de l'implémentation d'un standard international appelé ECMA- avec la propriété spéciale parentNode.
62. D'autres implémentations de ce standard sont le langage Jscript de Microsoft dans IE et Ainsi document.body.firtChild.parentNode=document.body !
ActionScript, implémentation d'Adobe dans Flash.
Mais cette façon de parcourir le DOM n'est pas très aisée pour chercher et référencer un objet. D'où
l'intérêt des fonctions getElementById, getElementByTagNames, getElementsByClassName et
Javascript est un langage côté client, interprété (de script), orienté objet et à typage implicite (la autres qui permettent d'obtenir la référence d'un objet en connaissant seulement une de ses
première déclaration/affectation détermine le type d'une variable). caractéristiques (son id, son nom d'élément , sa classe, etc...).
Les balises <script> </script> peuvent être utilisées soit dans le <head> soit partout dans le 3.1. Accéder à un élément HTML ou chercher sa référence
document HTML pour y insérer du code J.S. Lorsque un fichier J.S. est importé, l'attribut src='URL
du fichier.js' est utilisé.
Le mot clé var permet de déclarer des variables simples ou objet. Le type est implicite à la première Pour pouvoir manipuler les objets du DOM, il faut d'abord savoir comment chercher les références
affectation d'une valeur à une variable. Le mot clé function, lui permet de définir des fonctions J.S. d'un ou de plusieurs objets. J.S. offre un ensemble de méthodes membre de l'objet document qui
permettent de résoudre ce problème.
2. Notion de Contexte Global A- En connaissant son attribut 'id'
C'est l'ensemble des objets existants et pouvant être accédés et utilisés dans du code J.S. var reference=document.getElementById('nomdidentificateur') permet d'obtenir une référence sur
Exemples : une balise HTML en utilisant sont attribut id.
+L'objet prédéfini window qui contient tous les objets et fonctions globaux de J.S.
+L'objet location, qui est un attribut de window permet d'accéder à toutes les informations possibles Exemple
sur l'URL actuellement visitée. window.location.reload() : est un appel pour recharger la page HTML : <input type='password' id='pwd1'>
actuelle. J.S. : var adresse_pwd1 = document.getElementById('pwd1') ;
+L'objet history, membre de window contient l'ensemble de l'historique de navigation. if( adresse_pwd1.value == '')
window.history.forward() permet d'avancer dans l'historique, window.history.go(1) permet d'aller à alert('Veillez saisir votre mot de passe') ;
la première page de l'historique de navigation, etc. N.B : Remarquez dans cet exemple la valeur de l'attribut id de la balise input. Remarquez aussi
+Les fenêtres modales alert('Message') reponse=confirm('Message') et msg=Prompt('Question') sont comment on a utilisé l'attribut membre 'value' de l'adresse, car il existe un attribut de la balise
globales <input> qui s'appelle value.
1/8 2/8
DAWEB/Javascript DAWEB/Javascript
C-Chercher toutes les balises d'une classe donnée variable.setAttribute('nomAttribut','NouveauContenuAttribut') modifie l'attribut 'nomAttribut' de
grace à la méthode getElementsByClassName('NomDeClasse') qui retourne toutes les références la balise représentée par variable pour y mettre la valeur 'NouveauContenuAttribut'.
des objets qui ont un attribut class (qui est attribut de toutes les balises HTML) qui contient la class
variable.removeAttribute('nomAttribut') supprime un attribut
'NomDeClasse'. Rappelz-vous que l'attribut class prend une liste de classes comme class
= 'classTexteRouge classTextePenche classTexteSouligne', ie un ensemble de nom de classe CSS. Exemple récapitulatif :
var referenceScore= scoreElmt.firstChild ; //Fonction memebre d'une liste qui retourne le premier if (audio.canPlayType('audio/ogg')){
3/8 4/8
DAWEB/Javascript DAWEB/Javascript
audio.setAttribute('src','/sounds/alert1.ogg') ; Les données échangées entre le client et le serveur HTTP dans une application web AJAX sont
} formatées soit en XML (eXtended Markup Language) soit en JSON (JavaScript Object Notation).
Le format JSON est devenu de plus en plus populaire à cause de ses avantages. En effet des
}
données au format JSON peuvent facilement être utilisées pour créer des objets J.S. là où en format
audio.play() ; XML, il faut parcourir le DOM des données, créer des variables J.S. et leur assigner les valeurs lues
dans le DOM.
Exemple utilisation JSON
4. Applications AJAX <!DOCTYPE html>
Ajax : Asynchronous Javascript And XML (eXtended Markup Language) <html>
<body>
Si au début de son existence, le langage JS a surtout permis d'implanter les contrôles d'erreur des
champs de formulaires saisis par les utilisateurs (comme dans Exercice 1 de TP N°4) et de faire des <h2>JSON Object Creation in JavaScript</h2>
animations (HTML dynamique), son existence a permis pour la première fois d'envisager d'effectuer <p id="demo"></p>
une partie des traitements faits sur le serveur dans le navigateur. Ceci a pour grand avantage de
nécessiter moins de ressources côté serveur, en termes de machines/énergie electrique/ressources <script>
var texte = '{"name":"John Johnson","street":"Oslo West 16","phone":"555
humaines ; 1234567"}';
Pour l'utilisateur, les avantages sont que sa bande passante, généralement déjà restreinte, n'est pas var obj = JSON.parse(texte);
utilisée pour télécharger du HTML/CSS pour chaque page, mais uniquement les données. Regardez
l'exemple suivant pour avoir une idée sur l'utilisation de l'objet XMLHttpRequest afin de créer une document.getElementById("demo").innerHTML =
obj.name + "<br>" +
page HTML rien qu'avec du J.S. (http://help.dottoro.com/ljspgwvf.php). obj.street + "<br>" +
obj.phone;
</script>
Dans l'exemple ci-dessus, la variables text est une chaine de caractère qui a était transformée en un
objet grâce à la ligne JSON.parse(texte) (JSON.parse est offerte par tous les moteurs JS). En
1-Requête HTTP PHP pratique, on utilise un objet XMLHttpRequest pour demander des données formatées comme la
/Jsp variable 'texte' puis avec du code J.S. on crée un objet et on utilise ses attributs comme données. En
2-HTML/CSS/JS
/Asp
HTML utilisant XML, réaliser le même travail requiert beaucoup plus de code, d'où l'avantage du format
CSS/JS 3-Requête HTTP SGBD
JSON.
4-HTML/CSS/JS
Client Serveur
5/8 6/8
DAWEB/Javascript DAWEB/Javascript
Traitements
else{
Interface Traitements Données
Utilisateur password2.setCustomValidity('');
2-HTML/CSS/JS PHP
HTML /Jsp
CSS/JS 3-Requête HTTP /Asp SGBD
Notez la foncion addEventListener. Elle reçoit en premier paramètre le nom d'un événement parmi
4-XML/JSON les événements pré-définis possibles ; en second argument le nom de la fonction qu'il faut exécuter
lorsque l'événement arrive, le troisième paramètre peut être true ou false comme il peut être omis
(on passe sur son utilité ici).
Serveur Les événement dépendent de l'élément HTML considérés et on peut associer plusieurs fonctions à
Client
un élément pour plusieurs événements. par exemple :
Application web AJAX 2-tiers. Le dialogue HTTP concerne
des ressources HTML/CSS/J.S. seulement lors de la phase document.getElementById("myBtn").addEventListener("mouseover", myFunction);
document.getElementById("myBtn").addEventListener("click", someOtherFunction);
de l'accès à l'application. Par la suite, uniquement des
document.getElementById("myBtn").addEventListener("mouseout", someOtherFunction);
données (au format XML ou JSON) sont échangées. Une
partie des traitements se fait dans le client HTTP Le nom de l'événement utilisé correspond au nom de l'attribut HTML dédié à l'événement considéré
sans le préfixe 'on'. Par exemple, un élément HTML possède les attributs événementiels :
onmouseover, onclick, onmouseout, onfocus, etc. En enregistrant des fonctions pour ses
événements, on utilisera 'mouseover', 'click', 'mouseout', 'focus' comme paramètre à
addEventListner !
5. Evénements Javascript
Dans le navigateur, on peut associer des fonctions JS à certains événements qui concernent tout
objet du DOM. 6. Conclusion
En effet, à chaque action de l'utilisateur/réseau, un événement est généré. On peut associer une
fonction à exécuter lorsque l'événement se réalise. Dans ce chapitre, nous avons abordé le langage de script javascript utilisé dans le navigateur (côté
client). Avec les bibliothèques J.S. comme JQuerry, Angular etc. aujourd'hui on peut créer de
Exemple : Exercice de TP N°4 revisité. nouvelles applications web appelée Ajax qui s'appuient sur ces framework pour faciliter le
développement et le déploiement des applications web, en particulier dans leur partie exécutée dans
<script> le navigateur.
var password1= document.getElementById('pwd1');
var checkPasswordValidity=function(){
if(password1.value != password2.value){
7/8 8/8