Objet Dom
1 - L’objet document
Résumé
Pour sélectionner un élément, le couteau suisse est la méthode querySelector
, elle fait les mêmes choses que
getElementById
, getElementsByName
, getElementsByClassName
ou getElementsByTagName
. Avec un bémol, querySelector
sélectionne que le premier élément, s’il y en a plusieurs de même type.
Pour sélectionner plusieurs éléments, il faut préférer querySelectorAll
et getElementsByName
à getElementsByClassName
ou getElementsByTagName
,
car ils renvoient un tableau d’objets, qui est plus facile à itérer avec un forEach, par exemple.
a - getElementById
L’instruction getElementById permet de cibler un élément particulier de notre document en utilisant son id. Ainsi, si notre code HTML contient ceci
<input type="radio" id="section1" name="language" value="JavaScript">
Nous pourrons le sélectionner de cette façon
const section = document.getElementById("section1")
La variable section contiendra l’objet correspondant à la balise input
.
La valeur de section.value
sera Ma section
.
b - getElementsByName
L’instruction getElementByName permet de cibler un élément particulier de notre document en utilisant son attibut name.
<input type="radio" id="section1" name="language" value="JavaScript">
Nous pourrons le sélectionner de cette façon
const language = document.getElementByName("language")
La valeur de language.value
sera JavaScript
.
<input type="radio" name="rate" value="Very poor"> <!--Very poor-->
<input type="radio" name="rate" value="Poor"> <!--Poor-->
<input type="radio" name="rate" value="OK"><!--OK-->
<input type="radio" name="rate" value="Good"><!--Good-->
<input type="radio" name="rate" value="Very Good"><!--Very Good-->
const rates = document.getElementsByName("rate")
forEach
par exemple.
c - getElementsByClassName
L’instruction getElementsByClassName
permet de cibler tous les éléments de notre document portant une
classe précise.
Ainsi, si notre code HTML contient ceci
<div class="row"></div>
<section class="row"></section>
<footer class="row"></footer>
Nous pourrons les sélectionner de cette façon :
let lignes = document.getElementsByClassName("row")
La variable lignes
contiendra une collection d’objets correspondant aux 3 balises portant la classe “row”.
d - getElementsByTagName
L’instruction getElementsByTagName permet de cibler tous les éléments de notre document portant une balise précise. Nous pourrons les sélectionner de cette façon
let balisesDiv = document.getElementsByTagName("div")
La variable balisesDiv
contiendra une collection d’objets correspondant à toutes les balises div
de notre document.
e - querySelector
et querySelectorAll
Avec querySelector
et querySelectorAll
, nous avons la possibilité d’effectuer des sélections en utilisant des sélecteurs CSS, beaucoup plus précis et détaillés que les simples ID, classes et balises.
Cette fonctionnalité était avant implantée dans Jquery. Elle est maintenant disponible dans javascript.
La différence entre les deux méthodes est la suivante :
querySelector
: retourne la première occurrence répondant au sélecteurquerySelectorAll
: retourne toutes les occurrences répondant au sélecteur sous forme de tableau d’objet
Nous pouvons, par exemple, écrire les différentes lignes ci-dessous
// Sélectionner la première occurrence qui correspond à une balise p
const baliseP = document.querySelector("p")
// Sélectionner toutes les occurrences qui correspondent à une balise p
const balisesP = document.querySelectorAll("p")
// Sélectionner la première occurrence qui correspond à une balise section qui a la classe "rouge"
const sectionRouge = document.querySelector("section.rouge")
// Sélectionner toutes les occurrences qui correspond à un élément ayant la classe "rouge" dans une une balise section
const classeRouge = document.querySelector("section .rouge")
f- les éléments de base
les éléments de base de la page peuvent être ciblés plus facilement :
document.documentElement
est l’élément principal du document (html)
// Sélectionne l'élément head
document.head
// Sélectionne l'élément body
document.body
2 - Les Attributs
a - hasAttribute
La méthode javascript hasAttribute(nom)
de l’objet Element permet de savoir si un attribut existe.
<div class="row" lang="fr"><div>
Nous pourrons les tester de cette façon :
// Return true
document.getElementsByTagName("div").hasAttribute("lang")
b - getAttribute
La méthode javascript getAttribute(nom)
de l’objet Element permet de récupérer la valeur d’un attribut d’un élément par rapport à son nom
<video src="pub.ogv" id="publicité"></video>
Nous pourrons les sélectionner de cette façon :
// Return pub.ogv
const attribut =document.getElementById("publicite").getAttribute("src")
c - setAttribute
La méthode javascript setAttribute(nom,donnée)
de l’objet Element permet de spécifier la valeur d’un attribut d’un
élément par rapport à son nom, ou d’en créer un, s’il n’existe pas dans l’élément.
<div align="left">Contenu de la DIV.</div>
Nous pouvons aligner le texte de la “div” à droite de cette façon :
// Alignement du texte à droite
document.getElementsByTagName("div").item(0).setAttribute("align","right");
d - removeAttribute
<div align="left">Contenu de la DIV.</div>
Nous pouvons supprimer l’attribut align de cette façon :
// Alignement du texte à droite
document.getElementsByTagName("div").item(0).removeAttribute("lang");
3 - Modifier le DOM
Les propriétés principales manipulables sont les suivantes :
- innerHTML : le html contenu dans l’élément sélectionné,
- textContent : le contenu textuel uniquement,
- style : permet de modifier le CSS de l’élément,
- value : valeur des champs de formulaire,
- attributes : les attributs de l’élément sélectionné (href, src…) cf. supra
a - innerHTML
L’attribut javascript innerHTML
de l’objet Element permet de connaître et de modifier le contenu HTMLd’une balise
<div id="contenu">Contenu de la DIV.</div>
Voici deux exemples d’affichage :
Afficher un élément
// Return : <div id="contenu"><Contenu de la DIV.</div>
document.getElementById("contenu").innerHTML;
Insérer un élément
// Return : <div id="contenu"<h1>Contenu de la DIV.</h1></div>
document.getElementById("contenu").innerHTML="<h1>Contenu de la DIV.</h1>";
b - value
La propriété value définit ou renvoie la valeur de l’attribut value d’un champ de texte.L
<input type="text" id="myText" value="Mickey">
Afficher un élément
// Return : Mickey
document.getElementById("myText").value;
Insérer un élément
// Return : ... value="Donald">
document.getElementById("myText").value="Donald";
c - textContent
L’attribut
textContent
récupéré le texte d’un nœud et
de ses descendants. Sa structure est comparable à innerHTML
, avec des différences références dans la page mozilla. Ici, il n’est pas possible d’insérer des balises HTML qui pourront être interprétées.
// Return : <div id="contenu">Bonjour</div>
document.getElementById("contenu").textContent="Bonjour";
On aura la même chose avec ceci :
// Return : <div id="contenu">Bonjour</div>
document.getElementById("contenu").innerText="Bonjour";
d - style
L’attribut javascript style
de l’objet Element du Document Object Model HTML (DOM HTML) permet de connaître et de modifier l’attribut STYLE d’une balise HTML. Plus de détails dans cette
page
.
La propriété style n’est pas prévues pour être lues. On ne pourra donc pas lire le CSS de l’élément par cette propriété