11540 sujets

JavaScript, DOM et API Web HTML5

Bonjour à vous tous,

Je me suis remis au Javascript et cette fois-ci je crois avoir enfin compris ce qu'est le DOM. Dans ce cas, si j'ai bien compris, je dois pouvoir vous l'expliquer. Voici donc ce que j'ai compris.

Considérons d'abord cette structure HTML simple :
<!DOCTYPE html>
<html lang="fr">
<head>
   <meta charset="UTF-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>DOM et structure HTML de la page web</title>
</head>
<body>
    <h1>Bienvenue !</h1>
    <p>Ceci est un paragraphe.</p>
    <img src="image.jpg" alt="Une image">
</body>
</html>

Quand on ouvre cette page web dans un navigateur, celui-ci génère pour lui un graphique sous forme d'arborescence comme l'indique l'image ci-dessous.

upload/1744622408-62242-capturedncran2025-04-14111921.png

Le DOM (Document Object Model) est donc une représentation graphique de la structure HTML de la page web, sous forme d’arborescence. Le DOM transforme le code HTML en une organisation logique de nœuds que le navigateur peut comprendre, afficher et modifier dynamiquement. Le DOM permet ainsi aux langages comme Javascript de manipuler la page en temps réel : modifier un texte, cacher une image, réagir à un clic, etc.

Au final, le DOM agit comme une passerelle entre le HTML et JavaScript. Le HTML est transformé en objets (les noeuds) et devient ainsi le DOM que JavaScript peut lire, modifier ou supprimer. Et on appelle le DOM "Document Object Model" parce que toutes les balises, attributs, valeurs, chaînes de caractère, etc. de la page (les noeuds) deviennent des objets manipulables, possédant des propriétés et des caractéristiques comme n'importe quelle chose ou truc et possédant aussi des méthodes pouvant être manipulées par le langage JavaScript.

Alors, c'est bien cela le DOM ?
Modifié par ObiJuanKenobi (14 Apr 2025 - 11:36)
Modérateur
Salut,

Oui c'est ça.

Sache qu'un commentaire html ou un texte ou une ligne vide est aussi notifiée dans le DOM. Si tu utilises en Javascript des méthodes ou un attribut du DOM level 1 et que tu veuilles cibler un élément, tu peux récupérer un objet vide (mais pas undefined ou null). Je pense notamment à firstChild.
Bonjour,

Tout cela me semble assez juste, j'aurais peut-être juste évité le terme "représentation graphique". Sinon, puisque tu te mets au JavaScript, tu verras peut-être passer des frameworks, tel que React.js, qui parlent de "DOM virtuel". C'est une sorte de copie du DOM dont tu viens de parler, mais la manipulation de ce DOM virtuel est assez coûteuse. Le javascript natif ainsi que des frameworks tel que Svelte se contentent, eux, de manipuler le DOM dont tu viens de parler, ce qui est beaucoup plus optimisé.
Vous ne pouvez pas savoir à quel point je suis content d'avoir enfin compris le sujet fondamental en Javascript qu'est le DOM et le concept "objet". Je butais sur ce sujet depuis quasiment la toute première fois. J'avais, pour ainsi dire, un caillou coincé sous les roues du chariot dans lequel je me trouvais en direction du développement web. Maintenant, j'ai dégagé ces cailloux et le chariot avance, doucement mais il avance.

Je viens maintenant de connaître la différence fondamentale entre un objet et une méthode.
Un objet possède des propriétés qui lui sont propres. Par exemple, une voiture est un objet parce qu'elle possède les propriétés de couleur, de modèle, de vitesse maximale, etc. Et une méthode est une fonction à l'intérieur des objets. Ainsi, la voiture a une méthode "démarrer" qui a pour fonction de mettre en route la voiture. Autrement dit, un objet a des propriétés à lister tandis qu'une méthode a des fonctions à exécuter.

Maintenant, je vais pouvoir m'attaquer à d'autres sujets avec plus de sérénité, qui sont les variables, les fonctions, les expressions, les conditions, les boucles et les événements.
Modifié par ObiJuanKenobi (14 Apr 2025 - 17:21)
Olivier C a écrit :
Bonjour,

Tout cela me semble assez juste, j'aurais peut-être juste évité le terme "représentation graphique". Sinon, puisque tu te mets au JavaScript, tu verras peut-être passer des frameworks, tel que React.js, qui parlent de "DOM virtuel". C'est une sorte de copie du DOM dont tu viens de parler, mais la manipulation de ce DOM virtuel est assez coûteuse. Le javascript natif ainsi que des frameworks tel que Svelte se contentent, eux, de manipuler le DOM dont tu viens de parler, ce qui est beaucoup plus optimisé.


Hello, wow c'est super intéressant !! Je suis d'accord que le DOM si virtuel avec Reactt ça peut engendrer des pbs de performances.

Penses-tu Olivier C que avec le Svelte ça peut être plus efficace ?? Je cherche vraiment à m'approcher du natif, le codage des extensions SKETCH demande du node Smiley murf
Olivier C a écrit :
...le terme "représentation graphique"...

Pourquoi j'aurais du éviter d'employer le terme "représentation graphique" ? C'est pourtant bien une sorte de graphique, puisqu'on voit des traits qui se dirigent vers des neouds.
Modifié par ObiJuanKenobi (15 Apr 2025 - 11:01)
@ObiJuanKenobi : oui mais, techniquement, ce n'est pas juste. C'est graphique pour ta représentation, mais en réalité le DOM est une interface permettant de manipuler le contenu d'une page web, c'est purement conceptuel. Enfin bon, je ne vais pas chipoter.

@LauraMariaWulf : je suis un amateur et.j'ai toujours manipulé directement en JavaScript vanilla, hormis quelques tests de frameworks JS front par-ci par-là. Donc ma vision est essentiellement théorique. Disons que, pour React, le DOM virtuel est coûteux en ressources mémoire côté client, qui plus est ses fichiers sont lourds à charger, le framework demande ensuite un recalcul de la page. Tout cela n'est pas très optimisé et c'est pour cette raison que de plus en plus d'utilisateurs React l'utilisent en corrélation avec Next.js car il compense certains défauts (par exemple en améliorant le rendu initial), alors qu'au départ le framework se voulait agnostique pour le côté backend. Svelte est très bien, mais pas aussi mature et bien moins utilisé par les entreprises ; pour un projet perso c'est lui que j'utiliserais, pour un projet pro... ben ça dépendra de la boîte.
Modifié par Olivier C (15 Apr 2025 - 11:51)
Modérateur
Olivier C a écrit :
@ObiJuanKenobi : oui mais, techniquement, ce n'est pas juste. C'est graphique pour ta représentation, mais en réalité le DOM est une interface permettant de manipuler le contenu d'une page web, c'est purement conceptuel. Enfin bon, je ne vais pas chipoter.


Tu peux chipoter. J'avais relevé ce que tu as mis en exergue. Mais pour la compréhension de notre ami ObiJuanKenobi, j'ai préféré mettre la poussière sous le tapis.

LauraMariaWulf a écrit :

Penses-tu Olivier C que avec le Svelte ça peut être plus efficace ?? Je cherche vraiment à m'approcher du natif, le codage des extensions SKETCH demande du node


Svelte est largement mieux que React. Depuis la version 5 avec ses runes, tu as vraiment l'impression d'écrire du natif. Il y a un problème qui se pose actuellement. Dans certains contextes, tu es obligé d'écrire en Svelte 4.

En outre, utiliser une telle librairie ou autre du même acabit implique pour une utilisation spécifique (une SPA par exemple). Sinon, il n'y a aucun intérêt. Autant faire du natif. C'est comme un doctype dans l'HTML. Si ton document ne se sert pas des spécificités de html 5 par exemple, autant faire du HTML 4 ou xhtml 1.0 trans ou strict. Ce n'est pas parce que c'est la mode qu'on doit absolument utiliser des librairies alors qu'en natif, tu arrives à tes fins plus aisément.
Olivier C a écrit :
@ObiJuanKenobi : oui mais, techniquement, ce n'est pas juste. C'est graphique pour ta représentation, mais en réalité le DOM est une interface permettant de manipuler le contenu d'une page web, c'est purement conceptuel. Enfin bon, je ne vais pas chipoter.


Je crois que j'ai compris ce que tu veux dire. Ce n'est pas un graphique dans le sens "dessin" mais une mini structure HTML simplifiée pour que le Javascript s'y retrouve facilement. Le fait qu'il y ait des traits ne doit pas m'inciter à le considérer comme un graphique mais plutôt comme un schéma structurel réduit.
Modifié par ObiJuanKenobi (15 Apr 2025 - 13:22)