LâĂ©pine dorsale dâun document HTML est constituĂ©e de balises.
Selon le modĂšle dâobjets de document (DOM), chaque balise HTML est un objet. Les balises imbriquĂ©es sont des âenfantsâ de celle qui les entoure. Le texte Ă lâintĂ©rieur dâune balise est Ă©galement un objet.
Tous ces objets sont accessibles via JavaScript, et nous pouvons les utiliser pour modifier la page.
Par exemple, document.body est lâobjet reprĂ©sentant la balise <body>.
LâexĂ©cution de ce code rendra le <body> rouge pendant 3 secondes :
document.body.style.background = 'red'; // make the background red
setTimeout(() => document.body.style.background = '', 3000); // return back
Ici, nous avons utilisĂ© style.background pour changer la couleur dâarriĂšre-plan de document.body, mais il existe de nombreuses autres propriĂ©tĂ©s, telles que :
innerHTMLâ Contenu HTML du nĆud.offsetWidthâ la largeur du nĆud (en pixels)- ⊠etc.
BientĂŽt, nous apprendrons plus de façons de manipuler le DOM, mais nous devons dâabord connaĂźtre sa structure.
Un exemple du DOM
Commençons par le simple document suivant :
<!DOCTYPE HTML>
<html>
<head>
<title>About elk</title>
</head>
<body>
The truth about elk.
</body>
</html>
Le DOM représente le HTML comme une structure arborescente de balises. Voici à quoi ça ressemble :
Sur lâimage ci-dessus, vous pouvez cliquer sur les nĆuds des Ă©lĂ©ments et leurs enfants sâouvriront/se rĂ©duiront.
Chaque nĆud de lâarbre est un objet.
Les balises sont des nĆuds dâĂ©lĂ©ment (ou simplement des Ă©lĂ©ments) et forment la structure arborescente : <html> est Ă la racine, puis <head> et <body> sont ses enfants, etc.
Le texte Ă lâintĂ©rieur des Ă©lĂ©ments forme des nĆuds texte, Ă©tiquetĂ©s comme #text. Un nĆud texte ne contient quâune chaĂźne de caractĂšres. Il peut ne pas avoir dâenfants et est toujours une feuille de lâarbre.
Par exemple, la balise <title> a le texte "About elk".
Veuillez noter les caractĂšres spĂ©ciaux dans les nĆuds texte :
- une nouvelle ligne :
â”(en JavaScript appelĂ©\n) - un espace :
âŁ
Les espaces et les nouvelles lignes sont des caractĂšres totalement valides, comme les lettres et les chiffres. Ils forment des nĆuds de texte et deviennent une partie du DOM. Ainsi, par exemple, dans lâexemple ci-dessus, la balise <head> contient des espaces avant <title>, et ce texte devient un nĆud #text (il contient une nouvelle ligne et quelques espaces uniquement).
Il nây a que deux exclusions de haut niveau :
- Les espaces et les nouvelles lignes avant
<head>sont ignorés pour des raisons historiques. - Si nous mettons quelque chose aprÚs
</body>, alors cela est automatiquement dĂ©placĂ© Ă lâintĂ©rieur dubody, Ă la fin, car la spĂ©cification HTML exige que tout le contenu soit Ă lâintĂ©rieur de<body>. Il ne peut donc pas y avoir dâespace aprĂšs</body>.
Dans dâautres cas, tout est simple â sâil y a des espaces (comme nâimporte quel caractĂšre) dans le document, alors ils deviennent des nĆuds texte dans le DOM, et si nous les supprimons, il nây en aura pas.
Voici des nĆud de texte sans espace :
<!DOCTYPE HTML>
<html><head><title>About elk</title></head><body>The truth about elk.</body></html>
Les outils de navigation (qui seront bientĂŽt traitĂ©s) qui fonctionnent avec le DOM nâaffichent gĂ©nĂ©ralement pas dâespaces au dĂ©but/fin du texte et des nĆuds texte vides (sauts de ligne) entre les balises.
Les outils de dĂ©veloppement permettent dâĂ©conomiser de lâespace dâĂ©cran de cette façon.
Sur dâautres images DOM, nous les omettons parfois lorsquâelles ne sont pas pertinentes. Ces espaces nâaffectent gĂ©nĂ©ralement pas la façon dont le document est affichĂ©.
Auto-correction
Si le navigateur rencontre du HTML mal formé, il le corrige automatiquement lors de la création du DOM.
Par exemple, la balise la plus haute est toujours <html>. MĂȘme si elle nâexiste pas dans le document, elle existera dans le DOM, car le navigateur la crĂ©era. Il en va de mĂȘme pour <body>.
Par exemple, si le fichier HTML est le seul mot "Hello", le navigateur lâenroulera dans <html> et <body>, et ajoutera le <head> requis, et le DOM sera :
Lors de la génération du DOM, les navigateurs traitent automatiquement les erreurs dans le document, ferment les balises, etc.
Un document avec des balises non fermées :
<p>Hello
<li>Mom
<li>and
<li>Dad
⊠deviendra un DOM normal à mesure que le navigateur lit les balises et restaure les parties manquantes :
<tbody>Un âcas spĂ©cialâ intĂ©ressant est celui des tableaux. Selon la spĂ©cification DOM, ils doivent avoir un <tbody>, mais le texte HTML peut (officiellement) lâomettre. Ensuite, le navigateur crĂ©e automatiquement le <tbody> dans le DOM.
Pour le HTML :
<table id="table"><tr><td>1</td></tr></table>
La structure du DOM sera :
Vous voyez ? Le <body> est sorti de nulle part. Vous devez garder cela Ă lâesprit lorsque vous travaillez avec des tableaux pour Ă©viter les surprises.
Autres types de nĆuds
Il existe dâautres types de nĆuds en plus des Ă©lĂ©ments et des nĆuds de texte.
Par exemple, les commentaires :
<!DOCTYPE HTML>
<html>
<body>
The truth about elk.
<ol>
<li>An elk is a smart</li>
<!-- comment -->
<li>...and cunning animal!</li>
</ol>
</body>
</html>
Nous pouvons voir ici un nouveau type de nĆud de lâarbre â nĆud commentaire, Ă©tiquetĂ© comme #comment, entre deux nĆuds texte.
Nous pouvons penser â pourquoi un commentaire est-il ajoutĂ© au DOM ? Cela nâaffecte en rien la reprĂ©sentation visuelle. Mais il y a une rĂšgle â si quelque chose est en HTML, alors il doit aussi ĂȘtre dans lâarborescence DOM.
Tout en HTML, mĂȘme les commentaires, devient une partie du DOM.
MĂȘme la directive <!DOCTYPE...> au tout dĂ©but du html est Ă©galement un noeud du dom. Câest dans lâarborescence du DOM juste avant <html>. Peu de gens le savent. Nous nâallons pas toucher ce nĆud, nous ne le dessinons mĂȘme pas sur les diagrammes pour cette raison, mais il est lĂ .
Lâobjet document qui reprĂ©sente lâensemble du document est Ă©galement, formellement, un nĆud dom.
Il existe 12 types de nĆuds. En pratique, nous travaillons gĂ©nĂ©ralement avec 4 dâentre eux :
- le
documentâ le âpoint dâentrĂ©eâ dans le dom. - les nĆuds Ă©lĂ©ments â les balises HTML, les blocs de construction de lâarborescence.
- les nĆuds texte â contient du texte.
- les commentaires â parfois, nous pouvons y mettre des informations, elles ne seront pas affichĂ©es, mais js peut les lire depuis le dom.
Voyez par vous-mĂȘme
Pour voir la structure dom en temps réel, essayez le live DOM viewer. Tapez simplement le document, et il apparaßtra comme un dom en un instant.
Une autre façon dâexplorer le dom est dâutiliser les outils de dĂ©veloppement du navigateur. en fait, câest ce que nous utilisons lors du dĂ©veloppement.
Pour ce faire, ouvrez la page web elk.html, activez les outils de dĂ©veloppement du navigateur et passez Ă lâonglet Ă©lĂ©ments.
Cela devrait ressembler à ça :
Vous pouvez voir le dom, cliquer sur les éléments, voir leurs détails et ainsi de suite.
Veuillez noter que la structure du dom dans les outils de dĂ©veloppement est simplifiĂ©e. Les nĆuds texte sont affichĂ©s comme du texte. Et il nây a aucun nĆud texte âvideâ (espace uniquement). Câest trĂšs bien, car la plupart du temps nous nous intĂ©ressons aux nĆuds Ă©lĂ©ments.
En cliquant sur le bouton dans le coin supĂ©rieur gauche cela nous permet de choisir un nĆud Ă partir de la page Web Ă lâaide dâune souris (ou dâautres pĂ©riphĂ©riques de pointeur) et de âlâinspecterâ (faites dĂ©filer jusquâĂ lâonglet ĂlĂ©ments). cela fonctionne trĂšs bien lorsque nous avons une Ă©norme page html (et un Ă©norme dom correspondant) et que nous aimerions voir la place dâun Ă©lĂ©ment particulier.
Une autre façon de le faire serait simplement de cliquer avec le bouton droit sur une page Web et de sĂ©lectionner âinspecterâ dans le menu contextuel.
Dans la partie droite des outils se trouvent les sous-onglets suivants :
- Styles â nous pouvons voir le CSS appliquĂ© Ă lâĂ©lĂ©ment en cours, rĂšgle par rĂšgle, y compris les rĂšgles intĂ©grĂ©es (gris). Presque tout peut ĂȘtre modifiĂ© sur place, y compris les dimensions/margins/paddings de la boĂźte ci-dessous.
- Computed â pour voir le CSS appliquĂ© Ă lâĂ©lĂ©ment par propriĂ©tĂ© : pour chaque propriĂ©tĂ©, nous pouvons voir une rĂšgle qui la lui donne (y compris lâhĂ©ritage CSS et autres).
- Event Listeners â pour voir les Ă©couteurs dâĂ©vĂ©nements attachĂ©s aux Ă©lĂ©ments du DOM (nous les couvrirons dans la prochaine partie du tutoriel).
- ⊠etc.
La meilleure façon de les étudier est de cliquer dessus. La plupart des valeurs sont modifiables sur place.
Interaction avec la console
Comme nous travaillons le DOM, nous pouvons Ă©galement vouloir lui appliquer du JavaScript. Comme : obtenir un nĆud et exĂ©cuter du code pour le modifier, pour voir le rĂ©sultat. Voici quelques conseils pour voyager entre lâonglet Elements et la console.
Pour commencer :
- Sélectionnez le premier
<li>dans lâonglet ĂlĂ©ments. - Appuyez sur la touche Esc â cela ouvrira la console juste en dessous de lâonglet ĂlĂ©ments.
Maintenant, le dernier élément sélectionné est disponible en tant que $0, le précédent sélectionné est $1, etc.
Nous pouvons exĂ©cuter des commandes sur eux. Par exemple, $0.style.background = 'red' rend lâĂ©lĂ©ment de la liste sĂ©lectionnĂ© rouge, comme ceci :
VoilĂ comment obtenir un nĆud Ă partir dâElements dans la console.
Il y a aussi un chemin de retour. Sâil y a une variable rĂ©fĂ©rençant un nĆud DOM, alors nous pouvons utiliser la commande inspect(node) dans la console pour la voir dans le volet ĂlĂ©ments.
Ou nous pouvons simplement sortir le nĆud DOM dans la console et explorer âsur placeâ, comme document.body ci-dessous :
Câest Ă des fins de dĂ©bogage bien sĂ»r. Ă partir du chapitre suivant, nous accĂ©derons et modifierons le DOM en utilisant JavaScript.
Les outils de dĂ©veloppement du navigateur sont dâune grande aide au dĂ©veloppement : nous pouvons explorer le DOM, essayer des choses et voir ce qui ne va pas.
Résumé
Un document HTML/XML est reprĂ©sentĂ© dans le navigateur sous forme dâarbre DOM.
- Les balises deviennent des nĆuds Ă©lĂ©ment et forment la structure.
- Le texte devient des nĆuds texte.
- ⊠etc, tout en HTML a sa place dans le DOM, mĂȘme les commentaires.
Nous pouvons utiliser les outils de développement pour inspecter le DOM et le modifier manuellement.
Ici, nous avons couvert les bases, les actions les plus utilisĂ©es et les plus importantes pour commencer. Il existe une documentation complĂšte sur Chrome Developer Tools Ă lâadresse https://developers.google.com/web/tools/chrome-devtools. La meilleure façon dâapprendre les outils est de cliquer ici et lĂ , lire les menus : la plupart des options sont Ă©videntes. Plus tard, lorsque vous les connaissez en gĂ©nĂ©ral, lisez la documentation et dĂ©couvrez le reste.
Les nĆuds DOM ont des propriĂ©tĂ©s et des mĂ©thodes qui nous permettent de voyager entre eux, de les modifier, de se dĂ©placer dans la page, etc. Nous y reviendrons dans les prochains chapitres.
Commentaires
<code>, pour plusieurs lignes â enveloppez-les avec la balise<pre>, pour plus de 10 lignes - utilisez une sandbox (plnkr, jsbin, codepenâŠ)