--- title: Manipuler des documents slug: Learn/JavaScript/Client-side_web_APIs/Manipulating_documents tags: - API - Apprendre - Article - Codage - DOM - Document Object Model - Débutant - JavaScript - Navigator - WebAPI - Window translation_of: Learn/JavaScript/Client-side_web_APIs/Manipulating_documents original_slug: Apprendre/JavaScript/Client-side_web_APIs/Manipulating_documents --- {{LearnSidebar}}{{PreviousMenuNext("Learn/JavaScript/Client-side_web_APIs/Introduction", "Learn/JavaScript/Client-side_web_APIs/Fetching_data", "Learn/JavaScript/Client-side_web_APIs")}} Quand on écrit des pages web et des applications, une des choses les plus courantes que l'on veut faire est de manipuler la structure du document d'une manière ou d'une autre. On le fait généralement en utilisant le Document Object Model (DOM), un ensemble d'APIs qui permettent de contrôler le HTML et le style — et qui utilisent massivement l'objet [`Document`](/fr/docs/Web/API/Document). Dans cet article, nous allons voir comment utiliser le DOM en détail, ainsi que quelques APIs intéressantes qui peuvent modifier votre environnement.
Prérequis : Connaissances de base en informatique, notions de base d'HTML, CSS, et JavaScript — dont les objets JavaScript.
Objectif : Se familiariser avec les APIs DOM, et autres APIs souvent associées au DOM et à la manipulation de document
## Les principaux composants du navigateur Les navigateurs web sont des logiciels très complexes avec beaucoup de composants, dont beaucoup ne peuvent pas être contrôlés ou manipulés en utilisant JavaScript. Vous pourriez penser que de telles limitations sont une mauvaise chose, mais les navigateurs sont verrouillés pour de bonnes raisons, la plupart du temps pour des raisons de sécurité. Imaginez qu'un site web puisse accéder à vos mots de passe stockés ou à d'autres informations sensibles, ou se connecter à des sites web comme si c'était vous? Malgré les limitations, les APIs Web nous donnent accès à beaucoup de fonctionnalités, lesquelles nous permettent de faire plein de choses géniales avec les pages web. Il existe quelques éléments évidents que vous utilisez régulièrement dans votre code — jetez un coup d'œil au diagramme suivant, il représente les principaux composants du navigateur directement impliqués dans l'affichage des pages web: ![](document-window-navigator.png) - La _fenêtre_ est l'onglet du navigateur dans lequel une page web est chargée. Elle est représentée en JavaScript par l'objet [`Window`](/fr/docs/Web/API/Window). Utiliser les méthodes disponibles sur cet objet nous permet par exemple de récupérer la taille de la fenêtre (voir [`Window.innerWidth`](/fr/docs/Web/API/Window/innerWidth) et [`Window.innerHeight`](/fr/docs/Web/API/Window/innerHeight)), manipuler le document chargé dans cette fenêtre, stocker des données spécifiques à ce document côté client (par exemple en utilisant une base de données locale ou autre mécanisme de stockage), attacher un [gestionnaire d'événement](/fr/docs/Learn/JavaScript/Building_blocks/Events) à la fenêtre en cours, et plus encore. - Le _navigateur_ représente l'état et l'identité du navigateur web (le user-agent par exemple) tel qu'il existe sur le Web. En JavaScript, il est représenté par l'objet [`Navigator`](/fr/docs/Web/API/Navigator). Vous pouvez utiliser cet objet pour récupérer des informations telles que la géolocalisation, les préférences de langue de l'utilisateur, un flux vidéo en provenance de la webcam de l'utilisateur, etc. - Le _document_ (accédé par le DOM dans les navigateurs) est la page actuellement chargée dans la fenêtre. Il est représenté en JavaScript par l'objet [`Document`](/fr/docs/Web/API/Document). Vous pouvez utiliser cet objet pour retourner et manipuler les éléments HTML et CSS qui composent le document. Par exemple: récupérer un élément dans le DOM, changer son texte, appliquer de nouveaux styles dessus, créer de nouveaux éléments et les ajouter à un élément comme enfant, ou même en supprimer. Dans cet article, nous allons principalement nous concentrer sur la manipulation du document, mais nous verrons également quelques autres éléments utiles. ## Le modèle objet du document (Document Object Model) Le document chargé dans chaque onglet de votre navigateur, et donc son contenu, est accessible via un modèle objet du document — Document Objet Model en anglais, ou DOM. Il s'agit d'une structure arborescente créée par le navigateur et qui permet aux langages de programmation d'accéder facilement à la structure HTML — par exemple, le navigateur lui-même l'utilise pour appliquer différents styles aux éléments correspondants sur la page, tandis qu'un développeur comme vous et moi peut l'utiliser pour manipuler le DOM avec du JavaScript après que la page ait été chargée. Nous avons créé une simple page d'exemple, [dom-example.html](https://github.com/mdn/learning-area/blob/master/javascript/apis/document-manipulation/dom-example.html) ([voir en direct](https://mdn.github.io/learning-area/javascript/apis/document-manipulation/dom-example.html)). Essayez de l'ouvrir dans votre navigateur — c'est une page très simple qui contient un élément [`
`](/fr/docs/Web/HTML/Element/section), à l'intérieur duquel se trouve une image et un paragraphe avec un lien. Le code source HTML ressemble à ça: ```html Simple DOM example
A red Tyrannosaurus Rex: A two legged dinosaur standing upright like a human, with small arms, and a large head with lots of sharp teeth.

Here we will add a link to the Mozilla homepage

``` Le DOM, quant à lui, ressemble à ça : ![](dom-screenshot.png) > **Note :** Ce diagramme du DOM a été créé en utilisant le [Live DOM viewer](https://software.hixie.ch/utilities/js/live-dom-viewer/) de Ian Hickson. Vous pouvez voir ici que chaque élément et morceau de texte dans le document possède sa propre entrée dans l'arbre — chacune étant appelée **nœud** (_node_). Vous rencontrerez également plusieurs termes pour décrire les différents type de nœuds ou leur position dans l'arbre les uns par rapport aux autres : - **Nœud élément (_element node_)** : N'importe quel élément, tel qu'il existe dans le DOM. - **Racine (_root_)** : Le nœud de plus haut niveau dans l'arbre. Dans le cas d'un document HTML, il s'agit toujours du nœud `HTML` (d'autres langages de balisage tels que SVG et XML auront des racines différentes). - **Enfant (_child_)** : Un nœud _directement_ à l'intérieur d'un autre nœud. Ainsi, dans l'exemple ci-dessus, `IMG` est un enfant de `SECTION`. - **Descendant** : Un nœud _n'importe où_ à l'intérieur d'un autre nœud. Par exemple, `IMG` est un enfant de `SECTION` mais également l'un de ses descendants. En revanche `IMG` n'est pas un enfant de `BODY`, puisqu'il est deux niveaux plus bas dans l'arbre, mais il est un de ses descendants. - **Parent** : Un nœud qui a un autre nœud _directement_ à l'intérieur. Par exemple, `BODY` est le parent de `SECTION`. - **Ancêtre (_ancestor_)** : Un nœud qui a un autre nœud _n'importe où_ à l'intérieur. Par exemple, `BODY` est l'ancêtre d'`IMG`. - **Frères et sœurs (_sibling_)** : Des nœuds qui ont le même parent. Par exemple, `IMG` et `P` sont frères et sœurs. - **Nœud texte (_text node_)** : Un nœud contenant une chaîne de caractères. Il est utile de vous familiariser avec ces termes avant de travailler avec le DOM, puisqu'un certain nombre de documentations les utilisent. Vous les avez peut-être déjà rencontrés si vous avez étudié le CSS (ex. sélecteur descendant, sélecteur enfant). ## Apprentissage actif : Manipulations basiques du DOM Pour commencer l'apprentissage de la manipulation du DOM, commençons par un exemple concret. 1. Faites une copie locale de la page [dom-example.html](https://github.com/mdn/learning-area/blob/master/javascript/apis/document-manipulation/dom-example.html) et de l'[image](https://github.com/mdn/learning-area/blob/master/javascript/apis/document-manipulation/dinosaur.png) qui l'accompagne. 2. Ajoutez un élément `` juste avant la balise fermante ``. 3. Pour manipuler un élément dans le DOM, vous allez d'abord sélectionner cet élément et stocker une référence à cet élément dans une variable. À l'intérieur de votre élément `