Manipulation du DOM en JavaScript
Manipulation du DOM en JavaScript
Sélection d’éléments
Javascript : manipuler l’arbre DOM
Université Lille 1 - Licence 1 SESI Technologies du Web 1 1 Université Lille 1 - Licence 1 SESI Technologies du Web 1 2
Sélections Manipulations Evénements Manipuler DOM Sélections Manipulations Evénements Manipuler DOM
getElementsByClassName
la méthode getElementsByClassName sélectionne les éléments dont la
classe est fournie en paramètre
getElementById
la méthode getElementById de l’objet document sélectionne l’unique getElementsByTagName
élément du document dont l’id est fourni en paramètre, ou null si aucun la méthode getElementsByTagName sélectionne les éléments dont la balise
est fournie en paramètre
◮ le résultat est un objet élément (de type HTMLElement)
Ces 2 méthodes :
1 var element = document . getElem entById ( " joconde " ) ;
◮ peuvent s’appliquer au document ou à un élément du document, dans
le second cas seuls les éléments descendants sont sélectionnés
◮ ont pour résultat la liste des éléments sélectionnés
−→ se manipule comme un tableau non mutable
cette liste est dynamique
Université Lille 1 - Licence 1 SESI Technologies du Web 1 3 Université Lille 1 - Licence 1 SESI Technologies du Web 1 4
Sélections Manipulations Evénements Manipuler DOM Sélections Manipulations Evénements Manipuler DOM
Université Lille 1 - Licence 1 SESI Technologies du Web 1 5 Université Lille 1 - Licence 1 SESI Technologies du Web 1 6
Sélections Manipulations Evénements Manipuler DOM Sélections Manipulations Evénements Manipuler DOM
Université Lille 1 - Licence 1 SESI Technologies du Web 1 7 Université Lille 1 - Licence 1 SESI Technologies du Web 1 8
Sélections Manipulations Evénements Manipuler DOM Sélections Manipulations Evénements Manipuler DOM
1 // r é c u p é r a t i o n de l ’ é l é m e n t d ’ id ’ celebre ’
2 var monImage = document . g etElemen tById ( " celebre " ) ;
3 // a c c è s à son attribut ’ width ’ : un number
4 var taille = monImage . width ;
5 // modification de son attribut ’ width ’
◮ les atttributs html sont des propriétés 6 monImage . width = taille + 100;
◮ même nom, en minuscules, avec « conversion camelback » 7 // modification d ’ autres attributs
8 monImage . src = " images / joconde . jpg " ;
◮ l’attribut class devient className 9 monImage . alt = " le tableau de la Joconde " ;
◮ la valeur peut être string, number ou boolean selon attribut 10 monImage . className = " gauche " ;
◮ on peut également utiliser getAttribute et setAttribute
◮ dans ce cas la valeur est toujours une chaı̂ne de caractères
Université Lille 1 - Licence 1 SESI Technologies du Web 1 9 Université Lille 1 - Licence 1 SESI Technologies du Web 1 10
Sélections Manipulations Evénements Manipuler DOM Sélections Manipulations Evénements Manipuler DOM
Manipuler le contenu
1 var elemt = document . getElem entById ( " exemple " ) ; ...
2 var htmlText = element . innerHTML ; < div id = " exemple " >
3 alert ( htmlText ) ; / / −> ” < p > C e c i e s t < s t r o n g > <p > Ceci est
< strong > mon </ strong >
4 // m o n </ s t r o n g > c o n t e n u . < / p >”
contenu .
5
innerHTML </ p >
</ div >
6 var txt = element . textContent ;
...
la propriété innerHTML représente le contenu HTML d’un élément 7 alert ( txt ) ; / / −> ” C e c i e s t mon contenu ”
Université Lille 1 - Licence 1 SESI Technologies du Web 1 11 Université Lille 1 - Licence 1 SESI Technologies du Web 1 12
Sélections Manipulations Evénements Manipuler DOM Sélections Manipulations Evénements Manipuler DOM
dans une feuille de style, seulement aux propriétés définies dans le 8 elemt . style . marginRight = " 10 px " ;
9 elemt . style . marginTop = " 2% " ;
document HTML ou via style 10 elemt . style . ba ck gr ou n dC ol or = " rgba (128 ,0 ,0 ,0.5) " ;
11
◮ on utilise directement le nom de la propriété CSS après « conversion 12 var r = element . style . marginRight ; / / / ! \ ’ s t r i n g ’ avec les u n i t é s
camelback » si nécessaire 13 var nouveauR = r + 100; / / −> ” 1 0 p x 1 0 0 ” !!!
Université Lille 1 - Licence 1 SESI Technologies du Web 1 13 Université Lille 1 - Licence 1 SESI Technologies du Web 1 14
Sélections Manipulations Evénements Manipuler DOM Sélections Manipulations Evénements Manipuler DOM
Style « calculé »
1 // s é l e c t i o n de l ’ é l é m e n t voulu
2 var elemt = document . getElem entById ( " exemple " ) ;
getComputedStyle 3
4 // r é c u p é r a t i o n du style c a l c u l é
la méthode getComputedStyle de l’objet window permet d’obtenir le 5 var computed = window . g e t C o m p u te d S t y l e ( elemt ) ;
valeurs des propriétés CSS appliquées par le navigateur 6 var marge = computed . marginLeft ; // a v e c les u n i t é s , en px
7 var couleur = computed . b ac kg r ou nd Co l or ; // r g b ( . . . , . . . , . . . )
8
◮ les propriétés CSS ont le même nom que précédemment 9 // appliquer un facteur d ’ é c h e l l e de 10% à la largeur :
10 var largeur = parseInt ( computed . width ) ; / / r é c u p è r e valeur c a l c u l é e
pas de « raccourci » autorisé : margin interdit, utiliser marginLeft, ... 11 var nvLargeur = Math . floor ( largeur *1.10) ; / / ajoute 10%
◮ elles sont en lecture seule 12 elemt . style . width = nvLargeur + " px " ; // modifie style a p p l i q u é
Université Lille 1 - Licence 1 SESI Technologies du Web 1 15 Université Lille 1 - Licence 1 SESI Technologies du Web 1 16
Sélections Manipulations Evénements Manipuler DOM Sélections Manipulations Evénements Manipuler DOM
Université Lille 1 - Licence 1 SESI Technologies du Web 1 17 Université Lille 1 - Licence 1 SESI Technologies du Web 1 18
Sélections Manipulations Evénements Manipuler DOM Sélections Manipulations Evénements Manipuler DOM
Méthode d’abonnement
Université Lille 1 - Licence 1 SESI Technologies du Web 1 19 Université Lille 1 - Licence 1 SESI Technologies du Web 1 20
Sélections Manipulations Evénements Manipuler DOM Sélections Manipulations Evénements Manipuler DOM
avec [Link] :
1 placer les fonctions javascript dans un fichier à part de l’html 1 // fonction de mise en place des abonnements
2 var setupEvents = function () {
2 définir une fonction chargée de mettre en place les abonnements : 3 // abonnement pour é l é m e n t d ’ id ’ piedDePage ’
1 récupérer l’élément ciblé 4 var pied = document . get ElementBy Id ( " piedDePage " ) ;
2 abonner la fonction listener pour l’événement voulu 5 pied . a d d E v e n t L i s t e n e r ( " click " , action1 ) ;
6 // abonnement pour é l é m e n t d ’ id ’ laJoconde ’
3 déclencher cette fonction 7 var joconde = document . getElem entById ( " laJoconde " ) ;
◮ doit être fait lorsque la page est complètement chargée pour être sûr 8 joconde . a d d E v e n t L i s t e n e r ( " mouseover " , action2 ) ;
9 }
que tous les éléments existent 10
֒→ utiliser l’événement load sur window 11 // on provoque l ’ e x é c u t i o n de ” setupEvents ” à la fin du
12 // chargement du document
13 window . a d d E v e n t L i s t e n e r ( " load " , setupEvents ) ;
14
15 // d é f i n i t i o n des fonctions l i s t e n e r
16 var action1 = function () { ... }
17 var action2 = function () { ... }
Université Lille 1 - Licence 1 SESI Technologies du Web 1 21 Université Lille 1 - Licence 1 SESI Technologies du Web 1 22
Sélections Manipulations Evénements Manipuler DOM Sélections Manipulations Evénements Manipuler DOM
Université Lille 1 - Licence 1 SESI Technologies du Web 1 23 Université Lille 1 - Licence 1 SESI Technologies du Web 1 24
Sélections Manipulations Evénements Manipuler DOM Sélections Manipulations Evénements Manipuler DOM
Sélections Manipulations Evénements Manipuler DOM Sélections Manipulations Evénements Manipuler DOM
◮ [Link](noeudInséré,noeudRéférence) :
insère noeudInséré avant noeudRéférence comme fils de
◮ [Link](noeud) : noeud est supprimé des fils de
noeudParent
parent
◮ [Link](noeudAjouté) : le nœud noeudAjouté est
◮ [Link](remplaçant,remplacé) : remplaçant
ajouté à la fin des fils de parent
prend la place de remplacé comme fils de parent
Université Lille 1 - Licence 1 SESI Technologies du Web 1 29 Université Lille 1 - Licence 1 SESI Technologies du Web 1 30
Sélections Manipulations Evénements Manipuler DOM Sélections Manipulations Evénements Manipuler DOM
Problème
Fonction qui calcule une fonction
et si on a plus de 4 images ?
◮ une fonction peut calculer une variable et la fournir en résultat
◮ les listener diffèrent peu... 1 var exemple = function () {
2 var result = 10;
◮ on aurait pu résoudre le problème avec cette fonction 3 return result *10+ 5;
1 var listener = function ( numero ) { 4 };
2 var sourceDisplay = document . get ElementB yId ( " source " ) ;
3 sourceDisplay . innerHTML = " image " + numero ; ◮ c’est aussi possible avec les variables dont le résultat est une fonction
4 };
1 var creeFonction = func tion () {
2 var func = function ( i ) {
◮ mais il y a un paramètre... on peut alors écrire cela 3 return 2* i ;
1 var numero = NNN ; / / NNN = v a l e u r à c h a n g e r à c h a q u e fois
4 } ;
2 var listener = function () { 5 return func ;
3 var sourceDisplay = document . get ElementB yId ( " source " ) ; 6 }
7
4 sourceDisplay . innerHTML = " image " + numero ;
5 }; 8 var f = creeFonction (2) ; // le r é s u l t a t est une fonction
9 f; // f u n c t i o n ( ) { return 2∗ i ; }
10 f (12) ; / / −> 2 4
mais il faut changer NNN à chaque fois...
Université Lille 1 - Licence 1 SESI Technologies du Web 1 33 Université Lille 1 - Licence 1 SESI Technologies du Web 1 34
Sélections Manipulations Evénements Manipuler DOM Sélections Manipulations Evénements Manipuler DOM
Fonction qui calcule une fonction (2) Une fonction qui calcule les listeners
Université Lille 1 - Licence 1 SESI Technologies du Web 1 35 Université Lille 1 - Licence 1 SESI Technologies du Web 1 36
Sélections Manipulations Evénements Manipuler DOM
La solution
1 var setu pListene rs = function () {
2 var elements = document . g e t E l e m e n t s B y T a g N a m e ( " img " ) ;
3 for ( var i =0; i < elements . length ; i ++) {
4 elements [ i ]. a d d E v e n t L i s t e n e r ( " click " , creat eListene r ( i +1) ) ;
5 }
6 }
7
8 window . a d d E v e n t L i s t e n e r ( " load " , set upListen ers ) ;
9
10 var crea teListen er = function ( numero ) {
11 var listener = function () {
12 var sourceDisplay = document . ge tElement ById ( " source " ) ;
13 sourceDisplay . innerHTML = " image " + numero ;
14 };
15 return listener ;
16 }