Le Document Object Model (DOM) est une interface de programmation pour les documents HTML et XML. Il fournit une page dont des programmes peuvent modifier la structure, son style et son contenu. Cette représentation du document permet de le voir comme un groupe structuré de nœuds et d'objets possédant différentes propriétés et méthodes. Fondamentalement, il relie les pages Web aux scripts ou langages de programmation.
https://developer.mozilla.org/fr/docs/Web/API/Document_Object_Model/Introduction
$ API(\text{page Web}) = DOM + JS $
# Exemple d'utilisation du DOM en Python
import xml.dom.minidom as m
doc = m.parse("C:\\Projects\\Py\\chap1.xml");
doc.nodeName # Propriété DOM de l'objet document;
p_list = doc.getElementsByTagName("para");

document.getElementById("demo"), selectionne un element par id
document.querySelector("#demo"), selectionne un element par selecteur css
document.querySelectorAll(".demo"), selectionne tout les element par selecteur css
const container = document.getElementById("container");
const newElement = document.createElement("h3"); // On créer un element,
// mais il n'est pas encore attaché
// à l'arbre
newElement.innerText = "hello world from javascript";
container.appendChild(newElement);
<ul>
<li>un chien<li>
<li>un <a href="https://example.com/chat">chat</a>
</ul>
import m from "https://esm.sh/mithril@2.2.2"
let html = m("ul", [
m("li", "un chien"),
m("li", ["un ", m("a", {href: "https://example.com/chat"}, "chat")])
])
vnode¶Un vnode est la représentation d'une balise pour mithril
import m from "https://esm.sh/mithril@2.2.2"
m("a");
// <a></a>
m("a", {href: "https://example.com"});
// <a href="https://example.com"></a>
m("a", {href: "https://example.com"}, "Bonjour monde");
// <a href="https://example.com">Bonjour monde</a>
m("a", {href: "https://example.com"}, m("span", "Bonjour monde"));
// <a href="https://example.com"><span>Bonjour monde</span></a>
m("a", {href: "https://example.com"}, [m("span", "Bonjour "), "le monde"]);
// <a href="https://example.com"><span>Bonjour </span>le monde</a>
import m from "https://esm.sh/mithril@2.2.2"
let node = m("a", {href: "https://example.com"}, "hello world")
let root = document.getElementById("example-1")
m.render(root, node)
import m from "https://esm.sh/mithril@2.2.2"
let tasks = [
{name: "chips", status: "undone"},
{name: "crottes de fromage", status: "done"},
{name: "Bière (prestige)", status: "undone"},
]
function createTaskUI(task){
let isChecked = task.status === 'done';
return m('li',
m('input',
{type: 'checkbox', value: task.name, checked: isChecked}),
task.name)
}
function createIndividualTaskUI(tasks){
let ret = [];
for(const task of tasks){
ret.push(createTaskUI(task));
}
return ret;
}
function countNumberOfDoneTasks(tasks){
let ret = 0;
for(const task of tasks){
if(task.status === "done"){
ret ++;
}
}
return ret;
}
function crateTitle(tasks){
return m("span", ["Todo (", countNumberOfDoneTasks(tasks), "/", tasks.length, ")"])
}
function createTodoListUI(tasks){
return m("div", [
m("h5", crateTitle(tasks)),
m("ul", createIndividualTaskUI(tasks))
]);
}
let root = document.getElementById("example-2")
m.render(root, createTodoListUI(tasks))