Créer un nouvel élément avec createElement
Pour cette première façon de procéder, on va utiliser la méthode document.createElement qui permet, comme son nom l'indique, de créer un nouvel élément.

Il suffit pour cela de préciser le nom de la balise en paramètre de la méthode, comme ceci :
{"language":"text/javascript","content":"document.createElement(\"div\");","filename":""}

Pas encore, on a juste créer l'élément pour le moment, on peut modifier ses propriétés, par exemple pour ajouter du contenu textuels on peut modifier innerText
{"language":"text/javascript","content":"let el = document.createElement(\"div\");\nel.innerText = \"Test\";","filename":""}

innerHTML est prévu pour le cas où ta div va contenir d'autre balises, ici c'est juste un text, donc on préfères modifier innerText, en terme de bonne pratique c'est mieux de faire comme ça, mais si on modifiais innerHTML ça fonctionnerais aussi.

On pourrait directement modifier le style :
{"language":"text/javascript","content":"let el = document.createElement(\"div\");\nel.innerText = \"Test\";\nel.style.color = \"red\";","filename":""}
Mais généralement on va éviter de modifier le style directement, sauf cas particulier ou on a besoin de préciser des valeurs calculés, on va généralement plutôt prévoir des classes et modifier les classes de l'élément pour qu'il s'affiche avec un style prédéfinit.

Effectivement il y a la propriété className, qui contiens précisément ce que l'attribut class HTML définit. On pourrait ici aussi modifier l'élément directement, mais on va éviter, car la moindre modification nécéssite de réécrire toutes les classes de l'élément, et si on veut par exemple en ajouter ou en retirer juste une, ce n'est pas pratique.

Tout à fait, il y a la propriété classList, qui elle est un tableau avec la liste de chaque classe de l'élément, et elle possède des méthodes que l'on va utiliser, particulièrement la méthode add pour ajouter une classe.
{"language":"text/javascript","content":"let el = document.createElement(\"div\");\nel.innerText = \"Test\";\nel.classList.add(\"maclasse\");","filename":""}

Pas encore, là on l'as juste créer mais il n'est pas encore ajouté dans le DOM.
Intégrer cet élément dans le DOM
Il existe plusieurs méthode pour ajouter un élément dans le DOM, celle qu'on utilisera le plus souvent c'est appendChild, elle permet d'ajouter un élément enfant dans un élément sélectionné.

C'est exactement ça, un petit exemple pour tester ça :

Et bien non justement, la méthode appendChild ajoute l'élément au contenu déjà existant, sans y toucher, et le nouvel élément est toujours ajouté à la fin.

Dans ce cas, il y a une autre méthode, insertAdjacentElement, qui permet d'ajouter un élément en précisant la position avec :
- beforebegin : avant le début de la balise parent
- afterbegin : juste après le début de la balise parent, donc au début du contenu à l'intérieur
- beforeend : avant la fin de la balise parent, donc comme avec appendChild
- afterend : juste après la fin de la balise parent

Des éléments imbriqués
C'est là que ça se complique un petit peu.

En fait techniquement, ce n'est pas plus compliqué que ça, il ne va rien y avoir de nouveau, par exemple si on veut mettre une balise p dans un div et ajouter le div au body on peut procéder comme ça :

Imaginons, on veuille ajouter des "card" au DOM, chaque card possède un titre, une image, une description et une date, rien de très compliqué?

Voyons le code, avec du css et tout ce qui va bien.
Tout ça pour créer en Html :
{"language":"text/html","content":"<div class=\"card\">\n\t<span class=\"title\">Titre de la card</span>\n\t<img class=\"picture\" alt=\"Texte alternatif de l'image\" src=\"https://www.training-dev.fr/Img/Shared/training-dev-v3_250.png\">\n\t<span class=\"description\">Description de la card</span>\n\t<date class=\"date\">Date de la card</date>\n</div>","filename":""}

Ok, cette fois c'est toi qui va travailler, tu va me faire en javascript une card pour un profil utilisateur, elle doit contenir une zone pour la photo ainsi que le nom de l'utilisateur, mais aussi une autre zone dans laquelle tu mettras dans des éléments séparé avec titre à chaque fois :
- Le rôle de l'utilisateur
- Sa date d'inscription au site
- La liste de tous les commentaire qu'il a pu écrire sur le site, chacune dans une box qui contiendra un lien vers la page du commentaire, sa date de publication, le début du contenu, et un bouton pour répondre
- La liste de ses compétences avec à chaque fois une image et un texte

Là tu vois où je veux en venir quand je dit que ça peut rapidement se compliquer.

Non, c'était pour te faire réaliser que cette méthode, bien qu'efficace, peut rapidement devenir compliquée quand il y a trop d'éléments à créer. On va voir maintenant une autre méthode. J'ai terminé cette partie