LeDocument Object Model (DOM) est uneinterface de programmation normalisée par leW3C, qui permet à des scripts d'examiner et de modifier le contenu dunavigateur web[1]. Par le DOM, la composition d'un documentHTML ouXML est représentée sous forme d'un jeu d'objets – lesquels peuvent représenter une fenêtre, une phrase ou un style, par exemple – reliés selon une structure enarbre[1]. À l'aide du DOM, un script peut modifier le document présent dans le navigateur en ajoutant ou en supprimant des nœuds de l'arbre[1].
Document Object Model (DOM) signifie « modèle d'objets de document »[2].
Modèle
Un modèle sert à représenter quelque chose, comme le plan d'une ville. Le DOM représente le document qui se trouve dans le navigateur[2].
Objet
Enprogrammation, un objet est unconteneur qui comporte despropriétés et desméthodes – qui sont desvariables et des actions concernant ce qu'il représente[2]. Les objets du DOM peuvent représenter une fenêtre, un document, une phrase, un style…[1]
Document
Le DOM concerne un document, tel qu'une page web affichée dans un navigateur[2]. Une page web commence par une balise!DOCTYPE suivi de la balise<html>dans laquelle se trouve le reste du document[2]. Le DOM représente le document affiché par une structure en arbre, comportant des nœuds (branches et feuilles)[2].
À l'origine, le DOM (niveau 0,legacy) était un ensemble d'objets mis à disposition parNetscape Navigator, dont la version 4 parut en.Internet Explorer 4 suivit en octobre la même année. Ces deux navigateurs intégraient le support duDHTML[2], lequel requérait des extensions alors offertes par le DOM rudimentaire d'alors. Le document pouvait désormais être manipulé à travers le DOM ; cependant le même document n'était pas représenté de la même manière par les deux navigateurs. Ce problème a progressivement disparu avec l'adoption du DOM normalisé par leW3C[2]. Le DOM (niveau 4) est aujourd'hui incorporé dans la normeHTML5[1].
Les principales catégories d'objet d'un arbre DOM sont le document, les éléments et les attributs[1] :
document expose les informations concernant l'ensemble du document HTML ainsi que la balise<html>[1] .
chaqueelement expose une balise d'un document HTML ou XML, et comporte une propriétéattributes qui expose les attributs de la balise. Chaque élément comporte des méthodes permettant d'accéder aux éléments parent, enfant et frères de l'arbre DOM[1] .
chaquetext contient le texte qui se trouve à l'intérieur d'une balise[1] .
Chaque navigateur met en œuvre le DOM dans son langage de programmation. La spécification du DOM est alignée avec le langageJavaScript, reconnu par tous les navigateurs web[1]. N'importe quelle partie d'une page web peut ainsi être modifiée par programmation, et le programme fonctionnera sur n'importe quel navigateur web conforme à la norme DOM[1].
Techniquement le DOM permet de lire et modifier n'importe quel document utilisant desbalises, avec n'importe quel langage de programmation qui offre une interface de programmation DOM[2].
Avant sa standardisation par leW3C, chaquenavigateur web disposait de son propreDocument Object Model. Si le langage de base destiné à manipuler les documents web a vite été standardisé autour deJavaScript, il n'en a pas été de même pour la série précise de fonctions à utiliser et la manière de parcourir le document. Par exemple, lorsqueNetscape Navigator préconisait de parcourir untableau indexé nommédocument.layers[],Internet Explorer l'appelait plutôtdocument.all[], et ainsi de suite. En pratique, cela obligeait à écrire (au moins) deux versions de chaque morceau de script si l'on voulait rendre son site accessible au plus grand nombre.
La standardisation de ces techniques s'est faite en plusieurs étapes, lesquelles étendent chaque fois les possibilités précédentes sans jamais les remettre en cause.
La première est le DOM Level 1 publié en1998 (le niveau 0 étant considéré comme l'implémentation de base figurant dansNetscape Navigator 2.0), où le W3C a défini une manière précise de représenter un document (en particulier un documentXML) sous la forme d'un arbre. Chaque élément généré à partir du balisage comme, dans le cas de HTML, un paragraphe, un titre ou un bouton de formulaire, y forme un nœud. Est également définie une série de fonctions permettant de se déplacer dans cet arbre, d'y ajouter, modifier ou supprimer des éléments. En plus des fonctions génériques applicables à tout document structuré, des fonctions particulières ont été définies pour les documents HTML, permettant par exemple la gestion des formulaires. Le DOM Level 1 a été disponible dans sa plus grande partie dès les premières versions d'Internet Explorer 5 et de Netscape 6.
La seconde étape est le DOM Level 2 (publié en2000), à présent constitué de six parties (en plus deCore etHTML, on trouveraEvents,Style,View etTraversal and Range). Dans les évolutions de la brique de base (Core), on notera la possibilité d'identifier plus rapidement un nœud ou un groupe de nœuds au sein du document. Ainsi, pour obtenir un élément particulier on ne le recherchera plus dans un tableau comme dans les DOMpropriétaires précédents, mais on appellera la fonctiongetElementById().
DOM permet de représenter la structure d'un document et de ses éléments sous forme d'un arbre. Il est donc préférable de parcourir et de mémoriser l'intégralité du document avant de pouvoir effectuer les traitements voulus. Pour cette raison, les programmes utilisant DOM ont souvent une empreinte mémoire volumineuse en cours de traitement. À l'inverse, à partir d'un arbre DOM donné, il est possible de générer des documents dans lelangage de balisage voulu, qui pourront à leur tour être manipulés par l'interface DOM.
DOM est utilisé pour pouvoir modifier facilement des documentsXML ou accéder au contenu des pages web. Dans les cas ne nécessitant pas de manipuler les documents XML, mais juste de les lire, la méthodeSAX peut également être choisie car elle traite les éléments de façon successive sans charger le document en mémoire. Elle s'impose quand la taille du document excède la capacité de la mémoire.
La capture d'un événement consiste à exécuter une action (par exemple un programme enJavaScript) lorsque l'événement surveillé se produit dans le document. Les événements capturables du DOM sont[5] :