Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
Deux chapitres de ce tuto sont consacrés à la modification du DOM initial via un script.
Dans ce premier chapitre on verra comment récupérer les caractéristiques d'un élément du DOM et comment
les modifier (contenu, attributs, propriétés de style).
Dans le chapitre suivant on ira plus loin : insérer, supprimer, cloner, déplacer des noeuds du DOM.
Le DOM est une interface de programmation qui nous permet de manipuler le code HTML & CSS d’une page web de façon dynamique
en utilisant le langage JavaScript.
Le DOM est créé automatiquement lors du chargement d’une page web par le navigateur.
Désormais tous les navigateurs génèrent le même DOM, ce qui n'était pas le cas à l'origine (d'où l'invention du framework jQuery qui
proposait un script unique valable pour tous les navigateurs.)
On peut donc manipuler désormais le DOM en JS natif (sans recourir à jQuery). C'est ce que nous faisons dans ce chapitre.
Tout dans une page web doit être considéré comme un noeud ("node" en anglais).
Le document HTML est un noeud, chaque élément HTML est un noeud, les attributs des balises sont des noeuds,
le texte de chaque balise est aussi un noeud.
Le DOM de cette page va être construit comme une hiérarchie de nœuds. On peut le représenter sous forme d'un arbre.
Sachez que la page HTML est le noeud le plus haut hiérarchiquement et appelé : DOCUMENT.
Toutes les balises doubles ou simples de la page constituent des noeuds de type ELEMENT ou plus simplement des élements.
Le noeud HTML comprend deux "enfants" : HEAD et BODY. Pour ces deux "enfants" HTML est l'élément "parent".
L'élément HEAD contient à son tour deux enfants : TITLE et META. On peut dire aussi que TITLE et META ont pour "parent" HEAD.
L'élément BODY contient quatre enfants : H1 et trois balises P.
La structure DOM d'une page apparait dans l'onglet "éléments" de la console du navigateur.
Pour manipuler en JavaScript un noeud de type élément il faut d'abord le cibler.
Il existe plusieurs méthodes pour accéder à un élément HTML mais toutes ont un point commun : elles retournent un objet !
Donc la syntaxe générique est : variable = méthode de ciblage d'un élément HTML
Après cette instruction la variable créée référence l'élément ciblé.
Il faut utiliser des méthodes de l'objet document. Il faut distinguer les anciennes méthodes et les nouvelles introduites par l'API selectors de HTML5.
Pour les deux dernières méthodes, notez bien que le mot "Elements" est au pluriel puisqu'elles retournent un "array" d'éléments.
Ces deux nouvelles méthodes ont pour argument un sélecteur CSS.
Attention la première méthode retourne le premier élément correspondant au sélecteur CSS passé en paramètre.
alors que la deuxième méthode retourne un "array".
Si vous voulez cibler la troisième balise P de la page et que cet élément n'a ni l'attribut ID ni l'attribut class
comment faire ?
Il suffit d'écrire : document.querySelectorAll('p')[2] .
En effet le premier élément du tableau a l'indice 0, le second l'indice 2, etc.
Exemple : nous voulons cibler toutes les balises P de la page puis tous les éléments affectés de la classe "rem".
function f1()
{
var paragraphes = document.querySelectorAll('p');
// ou paragraphes = document.getElementsByTagName('p')
for (element of paragraphes) {element.style.color ="red"; }
}
function f2()
{
var remarques = document.querySelectorAll('.rem');
//ou remarques = document.getElementsByClassName('rem')
for (element of remarques) {element.style.color ="green"; }
}
Pour cibler une collection d'éléments de la page j'utilise la méthode querySelectorAll('sélecteur CSS')
de l'objet document.
Grâce à querySelectorAll() les variables paragraphes & remarques sont des tableaux ("arrays").
Un objet array (tableau) peut être parcouru par la boucle for ... of ... .
Notez aussi la syntaxe pour modifier la valeur d'une propriété CSS : élément.style.propriété = "nouvelle valeur"
Un élément se caractérise par différents paramètres : un contenu (texte et balisage), des attributs (src, class, alt, title, style, etc.), des propriétés CSS.
La récupération d'un paramètre d'un élément est souvent un préalable à sa modification.
Un seul exemple, si vous voulez augmenter l'opacité d'une image, il faut récupérer la valeur initiale de
la propriété opacity puis incrémenter cette valeur.
document.querySelector('button').onclick = function()
{
titre = document.querySelector('h3') ;
para = document.querySelector('p') ;
alert("Contenu et balisage du titre : " + titre.outerHTML);
alert("Contenu et balisage interne du titre : " + titre.innerHTML);
alert("Texte de titre : " + titre.textContent);
alert("Contenu et balisage du paragraphe : " + para.outerHTML);
alert("Contenu et balisage interne du paragraphe : " + para.innerHTML);
alert("Texte de paragraphe : " + para.textContent);
image = document.querySelector('img');
alert("Attribut alt de l'image existe ? " + image.hasAttribute('alt'));
alert("Attribut src de l'image existe ? " + image.hasAttribute('src'));
alert("Attribut title de l'image existe ? " + image.hasAttribute('title'));
}
titre référence la première balise H1 de la page.
para référence la première (et unique) balise P de la page.
image référence l'image unique de la page.
Pour savoir si l'image dispose de certains attributs j'ai utilisé une instruction basée sur la méthode élément.hasAttribute('attribut'). Cette méthode retourne true / false.
Observez bien la différence entre les propriétés outerHTML, innerHTML & textContent.
On veut récupérer les valeurs des différents attributs d'une image (élément IMG).