Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
sio2:le_document_object_model [2024/10/17 21:36] – [L’arbre DOM (Document Object Model)] dthevenot | sio2:le_document_object_model [2024/10/18 08:52] (Version actuelle) – [Propriétés des éléments] dthevenot | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Model (DOM) et les sélecteurs | + | ~~SLIDESHOW~~ |
+ | ====== Model (DOM) ====== | ||
{{ : | {{ : | ||
Javascript permet d’agir sur les propriétés des éléments d’un document HTML, mais aussi de manipuler l’arbre DOM. Le Document Object Model (en français modèle d’objets de document), abrégé en DOM, est une interface de programmation normalisée permettant de structurer des documents HTML et XML. Ce sont les navigateurs utilisés par les internautes pour accéder aux offres du Web, qui exploitent l’interface normalisée : la plupart des clients Web utilise le DOM ou des interfaces basées sur le DOM, pour générer des pages HTML ou XML. | Javascript permet d’agir sur les propriétés des éléments d’un document HTML, mais aussi de manipuler l’arbre DOM. Le Document Object Model (en français modèle d’objets de document), abrégé en DOM, est une interface de programmation normalisée permettant de structurer des documents HTML et XML. Ce sont les navigateurs utilisés par les internautes pour accéder aux offres du Web, qui exploitent l’interface normalisée : la plupart des clients Web utilise le DOM ou des interfaces basées sur le DOM, pour générer des pages HTML ou XML. | ||
+ | ===== ===== | ||
L’épine dorsale d’un document HTML est constituée de balises. Le Document Object Model reste pertinent comme présentation orientée objet d’un document Web. Il a aussi son intérêt comme interface pour l’ensemble des contenus dynamiques programmés, | L’épine dorsale d’un document HTML est constituée de balises. Le Document Object Model reste pertinent comme présentation orientée objet d’un document Web. Il a aussi son intérêt comme interface pour l’ensemble des contenus dynamiques programmés, | ||
+ | ===== ===== | ||
Selon le modèle d’objets de document (DOM), chaque balise HTML est un objet. Les balises imbriquées sont des “enfants” de celle qui les entoure. Le texte à l’intérieur d’une balise est également un objet. | Selon le modèle d’objets de document (DOM), chaque balise HTML est un objet. Les balises imbriquées sont des “enfants” de celle qui les entoure. Le texte à l’intérieur d’une balise est également un objet. | ||
Tous ces objets sont accessibles via JavaScript, et nous pouvons les utiliser pour modifier la page. | Tous ces objets sont accessibles via JavaScript, et nous pouvons les utiliser pour modifier la page. | ||
+ | ===== ===== | ||
Par exemple, document.body est l’objet représentant la balise < | Par exemple, document.body est l’objet représentant la balise < | ||
Ligne 16: | Ligne 17: | ||
</ | </ | ||
===== L’arbre DOM (Document Object Model) ===== | ===== L’arbre DOM (Document Object Model) ===== | ||
- | Structure arborescente. | ||
- | |||
Tout document HTML peut être représenté sous une forme arborescente | Tout document HTML peut être représenté sous une forme arborescente | ||
Exemple : | Exemple : | ||
Ligne 34: | Ligne 33: | ||
</ | </ | ||
</ | </ | ||
+ | ===== ===== | ||
Le code HTML généré par le DOM-Tree se présente donc ainsi : | Le code HTML généré par le DOM-Tree se présente donc ainsi : | ||
+ | ===== ===== | ||
Sur cet arbre, on distingue le nœud racine (html), puis des autres noeuds intermédiaires et des nœuds feuilles. Sous un nœud, sont situés ses descendants(child). | Sur cet arbre, on distingue le nœud racine (html), puis des autres noeuds intermédiaires et des nœuds feuilles. Sous un nœud, sont situés ses descendants(child). | ||
Ligne 41: | Ligne 41: | ||
Les nœuds p et div sont des nœuds frères (siblings). Ils se suivent de gauche à droite, selon leur ordre d’apparition dans le document. | Les nœuds p et div sont des nœuds frères (siblings). Ils se suivent de gauche à droite, selon leur ordre d’apparition dans le document. | ||
+ | ===== ===== | ||
Autre représentation du DOM : | Autre représentation du DOM : | ||
< | < | ||
Ligne 57: | Ligne 57: | ||
- ---- img | - ---- img | ||
</ | </ | ||
+ | ===== ===== | ||
Les sélecteurs utilisés en CSS ou en javascript, vont pouvoir utiliser les propriétés du DOM afin de définir la cible du traitement à effectuer. | Les sélecteurs utilisés en CSS ou en javascript, vont pouvoir utiliser les propriétés du DOM afin de définir la cible du traitement à effectuer. | ||
- | Pour voir une structure | + | => Explorer le DOM avec les outils |
- | ===== CSS : les sélecteurs ===== | + | |
- | Un sélecteur permet de déterminer | + | |
- | ==== Sélecteur simple | + | ==== Ressources et compléments ==== |
- | * ***** : tout élément | + | https:// |
- | * **balise** : tout élément dont la balise est < | + | https:// |
- | * **#id** : tout élément dont l’attribut id vaut id | + | ===== Agir sur les éléments et manipuler le DOM ===== |
- | * **.class** : tout élément | + | ==== Sélection d’éléments ==== |
+ | |||
+ | Pour manipuler les éléments d’une page, il faut au préalable les sélectionner. La sélection d’éléments peut se faire | ||
+ | * Par son attribut id : **var element = document.getElementById(" | ||
+ | * Par son attribut classe : **var classList = document.getElementsByClassName(" | ||
+ | * Par sa balise : **var lesDiv = document . getElementsByTagName (" | ||
+ | ===== ===== | ||
+ | * Par un sélecteur css : **var element = document.querySelector(" | ||
+ | * querySelector retourne le 1er élément | ||
+ | * querySelectorAll retourne tous les éléments correspondant au sélecteur, dans un tableau | ||
- | ==== Sélection selon un attribut | + | __Remarque :__ // |
- | Soit E un élément de type sélecteur simple : | + | ===== |
- | * **E[att]** | + | ==== Propriétés des éléments ==== |
- | * **E[att=val]** : tout élément dont l’attribut att vaut val, exemple : p[lang=fr] | + | Les éléments obtenus par sélection possèdent des propriétés manipulables |
- | * **E[att~=val]** : tout élément dont l’attribut att vaut une liste de mots , dont val | + | === Manipuler les attributs === |
- | * ** E[attˆ=”prefixe”]** : tout élément dont l’attribut | + | Les attributs html des éléments sont accessibles : **element.attribut** |
- | | + | |
- | | + | * L'attribut |
+ | La valeur obtenue peut-être de type string, number ou boolean. | ||
+ | ===== ===== | ||
+ | Il est également possible d' | ||
- | __Exception pour les attributs class et id__ | + | __Exemple :__ |
+ | Code html : < | ||
- | * Pour accéder à un élément dont l’attribut class est défini, utilisation du **.** | + | Code javascript : |
- | * Pour accéder à un élément dont l’attribut id est défini, utilisation du **#** | + | < |
+ | var monImage = document.getElementById(" | ||
+ | photo.src =" | ||
+ | photo.alt = "La Joconde"; | ||
+ | </ | ||
+ | ===== ===== | ||
+ | === Manipuler le contenu === | ||
+ | |||
+ | La propriété | ||
- | ==== Sélecteurs | + | La propriété **textContent** représente le contenu textuel d'un élément. |
- | __Pseudo-classes | + | ===== ===== |
- | *** E:pseudoC** tout élément appartenant à la pseudo-classe pseudoC, exemple : a :visited, a.fichier : | + | === Agir sur les propriétés css === |
+ | |||
+ | La propriété **style** d'un élément permet | ||
+ | ===== ===== | ||
+ | __Attention | ||
+ | |||
+ | **style** ne permet pas d' | ||
- | Quelques pseudo-classes : | + | Pour accéder à un style défini par une règle dans une feuille de style, il faut utiliser la fonction |
- | * **: | + | ===== ===== |
- | * **: | + | __Exemple |
- | | + | < |
- | | + | var element = document . getElementById |
- | * **: | + | var computed = window . getComputedStyle |
- | * **:nth-of-type(an + b)** (an + b)ème élément du type sélectionné et qui ont le même père, exemple : p: | + | var margeL = computed . marginLeft ; // unité récupérée |
- | * **:hover** élément sous le pointeur | + | var couleur = computed . backgroundColor ; // format rgb (... ,... ,...) |
- | * ** :visited** lien visité | + | var largeur = parseInt |
- | * **:link** lien non encore visité | + | var nvLargeur = Math . floor ( largeur |
+ | element . style . width = nvLargeur + " | ||
+ | </ | ||
- | __Pseudo éléments__ : | + | **getComputedStyle** permet d' |
+ | ===== ===== | ||
+ | ==== Manipuler le DOM ==== | ||
+ | |||
+ | Javascript permet de modifier la structure de l' | ||
- | * **E::pseudoE** tout pseudo-élément | + | Les nœuds de l' |
+ | ===== ===== | ||
+ | === L' | ||
+ | |||
+ | Cet objet possède les propriétés suivantes : | ||
+ | | ||
+ | | ||
+ | * nodeValue : contenu textuel s'il s'agit d'un nœud de type texte, null sinon | ||
+ | * parentNode ; nœud parent | ||
+ | * childNodes | ||
+ | ===== ===== | ||
+ | * firstChild, lastChild | ||
+ | * previousSibling, | ||
+ | * … cf https:// | ||
+ | ===== ===== | ||
+ | === Créer un noeud === | ||
+ | |||
+ | * **document.createElement(balise)** : création de nœud avec la balise précisée | ||
+ | * **document.createTextNode(text)** : création d'un nouveau nœud texte dont le contenu est text | ||
+ | * **node.cloneNode(prof)** : crée un nouveau nœud, copie de node, avec ses descendant si prof=true, sans ses descendants si prof=false. | ||
+ | ===== ===== | ||
+ | === Insérer un nœud dans le document === | ||
+ | |||
+ | * **noeudParent.insertBefore(noeud, | ||
+ | * **parent.appendChild(noeud)** | ||
- | Quelques pseudo-éléments : | + | Un nœud récupéré et inséré ailleurs est déplacé, il n' |
- | * **:: | + | ===== ===== |
- | * **:: | + | === Supprimer un nœud === |
- | * **:: | + | |
- | | + | |
- | ==== Utilisation de compteur en css, exemple ==== | + | |
- | On dispose d’un code source html avec différentes div de classe rmq. A chaque fois qu’une nouvelle | + | * **parent.replaceChild(remplaçant,remplacé)** : remplaçant prend la place de remplacé comme fils de |
- | + | ||
- | Définir un compteur dans l’élément body : #body{ counter-reset :noremarque ;} Le compteur sera incrémenté à chaque fois que la classe rmq sera rencontrée : div.rmq{** counter increment :**noremarque ;} | + | |
- | + | ||
- | Le compteur sera affiché avant chacune des remarques : div.rmq::before {content : | + | |
- | + | ||
- | ===== Combinaison de sélecteurs ===== | + | |
- | * **Sel1 Sel2** : tout élément Sel2 descendant de Sel1, exemple : article p, tous les paragraphes de article | + | |
- | * ** Sel1 > Sel2** : tout élément Sel2, fils de Sel1 | + | |
- | * **Sel1 + Sel2** : tout élément Sel2, premier frère de Sel1 | + | |
- | * **Sel1 ∼ Sel2** : tout élément Sel2 qui suit Sel1 (frère suivant) | + | |
- | + | ||
- | Les fonctions javascript **querySelector()** et **querySelectorAll()** permettent | + | |
- | + | ||
- | ====== Ressources et compléments ====== | + | |
- | https:// | + | |
- | https:// | + | |