Cours DOM
Cours DOM
Cours DOM
Document Object
Model
1
2
Manipulation des objets du document
DOM – arbre du document
3
La structure DOM
• le DOM pose comme concept que la page Web est vue comme un
arbre, comme une hiérarchie d'éléments. On peut donc
schématiser une page Web simple comme ceci :
4
5
La structure DOM
• NB : le texte présent dans une page Web est vu par le DOM comme
un nœud de type #text.
6
Conception de l’arborescence
• Le schéma adopté des documents est une arborescence
hiérarchisée.
– Les nœuds enfant sont d'une part le nœud texte avec le mot
"Bonjour" suivi d'un espace, d'autre part le nœud élément de
l'élément i.
9
accès aux nœuds
10
accès aux nœuds
11
accès aux nœuds
getElementById() :
Cette méthode permet de récupérer, s’il existe, le premier élément
HTML dont l’attribut ID a la valeur spécifiée. Sinon un objet à la
valeur Null sera retourné.
Exemple :
12
accès aux nœuds
getElementsByTagName() :
• Cette méthode permet de récupérer, sous la forme d'un tableau,
tous les éléments dont la balise a le nom spécifié. Si, dans une page,
on veut récupérer tous les <div>, il suffit de faire comme ceci :
13
accès aux nœuds
getElementsByName() : Renvoie une liste des éléments ayant le
nom donné, elle permet de ne récupérer que les éléments qui
possèdent un attribut name que vous spécifiez.
Exemple:
<div name="up">200</div>
<div name="up">145</div>
<div name="other">178</div>
up_divs = document.getElementsByName("up");
// retourne une liste des éléments contenant l’attribut name égal à
"up" 14
accès aux nœuds
getElementsByClassName() : Renvoie une liste des éléments
ayant le nom de la classe donnée
Exemple:
<div class="entete">l’entête de la page</div>
<div class="corps">ceci est le corps du texte</div>
<div name=" entete ">une autre entête</div>
up_divs = document.getElementsByClassName(" entete ");
// retourne une liste des éléments contenant l’attribut class égal à
"entete “ (1ere et 3ème division)
15
accès aux nœuds
querySelector() et querySelectorAll():
18
Editer les éléments HTML
20
Modifier le contenu HTML
• Pour modifier le contenu HTML, il suffit de faire l'inverse, c'est-à-dire de définir un
nouveau contenu :
21
A retenir
• Le DOM va servir à accéder aux éléments HTML présents dans un document afin
de les modifier et d'interagir avec eux.
• Document est un sous objet de window et représente la page Web. C'est grâce
à lui que l'on va pouvoir accéder aux éléments HTML de la page Web.
• De son côté, innerText n’est capable que de définir ou récupérer du texte brut,
sans aucunes balises HTML.
22
Naviguer entre les nœuds
23
Naviguer entre les nœuds
24
25
26
Exemple
27
28
La propriété parentNode
29
nodeType : retourne les type d’un nœud sous forme d’un nombre entier. Voici un
tableau qui liste les types courants, ainsi que leurs numéros.
Numéro Type
1 nœud élément
2 Nœud attribut
3 Nœud texte
8 Nœud commentaire
9 Nœud document
31
childNodes : retourne un tableau contenant la liste des enfants d'un élément.
nodeValue et data : Retourne la valeur d’un nœud.
les propriétés nodeValue et data ne s'appliquent que sur des nœuds textuels
32
Remarque :Les espaces et retours à la ligne effectués dans le code
HTML sont généralement considérés comme des nœuds textuels par
les navigateurs.
33
34
Créer et insérer des éléments
Avec le DOM, l'ajout d'un élément HTML se fait en trois temps :
• On crée l'élément.
1. Création de l'élément
35
Créer et insérer des éléments
2. Affectation des attributs :
on définit les attributs, soit avec setAttribute(), soit directement avec
les propriétés adéquates.
36
Créer et insérer des éléments
3. Insertion de l'élément :
On utilise la méthode appendChild() pour insérer l'élément.
appendchild signifie « ajouter un enfant », ce qui signifie qu'il nous faut
connaître l'élément auquel on va ajouter l'élément créé. Considérons
donc le code suivant :
37
Créer et insérer des éléments
Insertion de l'élément :
38
Créer et insérer des éléments
Explication : avant d'insérer notre élément <a>, la structure DOM du
document ressemble à ceci :
39
Créer et insérer des éléments
On voit que l'élément <a> existe, mais n'est pas lié. Un peu comme s'il
était libre dans le document : il n'est pas encore placé. Le but est de le
placer comme enfant de l'élément myP. La méthode appendChild() va
alors déplacer notre <a> pour le placer en tant que dernier enfant
de myP :
40
Créer et insérer des éléments
Ajouter des nœuds textuels :
41
Résultat : <div>
<p id="myP">Un peu de texte <a>et un lien</a> <a id=" sdz_link"
href="http://blog.crdp-versailles.fr/rimbaud" title="Découvrez le blog de la Classe Actu
! ">Le Tonnerre de Rimbaud</a></ </p></div>
42
43
44
Cloner un élément
• cloneNode() : Cette méthode requiert un paramètre booléen
( true ou false) : si vous désirez cloner (copier) le nœud avec (true)
ou sans (false) ses enfants et ses différents attributs.
45
Remplacer un élément par un autre
• replaceChild() : Cette méthode accepte deux paramètres : le 1 est le nouvel
élément, et le 2 est l'élément à remplacer. Cette méthode s'utilise sur tous les
types de nœuds (éléments, nœuds textuels, etc.).
Résultat :
<div><p id="myP">Un peu
de texte <a>et un
hyperlien</a> </p></div>
46
Supprimer un élément
• Pour en supprimer un élément, on utilise removeChild(). Cette méthode
prend en paramètre le nœud enfant à retirer. Soit le code HTML avec un
script ressemble à ceci :
47
Vérifier la présence d'éléments enfants
• hasChildNodes() : Il suffit d'utiliser cette méthode sur l'élément
de votre choix ; si cet élément possède au moins un enfant, la
méthode renverra true :
48
insérer un élément avant un autre
• La méthode insertBefore() permet d'insérer un élément avant un
autre. Elle reçoit deux paramètres : le premier est l'élément à
insérer, tandis que le deuxième est l'élément avant lequel
l'élément va être inséré. Exemple :
Résultat :
<p id="myP">Un peu de
texte ><em> en emphase
légère </em><a>et un
hyperlien</a> </p>
49
L'objet style
on peut aller plus loin et interagir avec les styles d'une page (en
lecture-écriture), en intervenant sur le DOM par des fonctions
Javascript agissant sur un nouvel objet : style défini sur chaque
élément du DOM.
50
L'objet style
il est possible d'avoir accès séparément à toutes les propriétés de
style, en faisant appel à la collection style.
L'objet style permet de lire et de modifier de façon dynamique
toutes les propriétés de style pour l'élément auquel il s'adresse,
avec la syntaxe element.style.propriete.
nœud= document.getElementById("id");
nœud.style.propriete = "valeur";
51
Exemple :
en CSS on aurait écrit :
<style type="text/css"> #nœud {font-size:12px; border-bottom: 1px solid #000; }
</style>
l'équivalent en DOM est :
var n = document.getElementById("nœud");
// taille de la police de l'élément à 12 pixels.
n.style.fontSize="12px";
// bordure du bas de 1 pixel avec un style solide et une couleur noire.
n.style.borderBottom = "1px solid #000";
Remarque : pour chaque propriété dont le nom en CSS comporte un trait
d'union, JavaScript demande l'utilisation d'une majuscule. Ainsi on note fontSize
au lieu de font-size
52
Accès aux classes CSS
Pour connaître, modifier ou bien attribuer l'attribut CLASS d'une balise HTML , on
utilise la propriété JS className.
Exemple:
// dans <head>
<style type="text/css">
.out {display:block;width:150px;height:30px;border: 1px solid #000;background-
color:none;} .over{display:block;width:150px;height:30px;border: 1px solid
#000;background-color:lime;} </style>
// dans <body>
<div id="divtext" class="out" >Zone de texte dans un div</div>
<script type="text/javascript">
divtext=document.getElementById("divtext");
// ici, this est exactement divtext
divtext.onmouseover= function() {this.className='over'};
divtext.onmouseout= function() {this.className='out'} 53
La propriété visibility qui prend 2 valeurs hidden ou visible.
l'exemple suivant :
<h3 onmouseover="document.getElementById('im2').style.visibility='visible' "
onmouseout="document.getElementById('im2').style.visibility='hidden' ">
Passez la souris ici sur ce paragraphe pour rendre l'image visible ! </h3>
<p id="im2" style="visibility:hidden" > <img src="style1.png" alt="image"> </p>
54