Académique Documents
Professionnel Documents
Culture Documents
Dans ce chapitre consacré à la manipulation du code HTML, nous allons voir le concept du
DOM. Nous étudierons tout d'abord comment naviguer entre les différents nœuds qui
composent une page HTML puis nous aborderons l'édition du contenu d'une page en ajoutant,
modifiant et supprimant des nœuds.
1
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Titre de la page</title>
</head>
<body>
<div>
<p>Du texte <a>et un lien</a></p>
</div>
</body>
</html>
Ainsi, l'élément <html> contient deux éléments, appelés enfants : <head> et <body>. Pour
ces deux enfants, <html> est l'élément parent. Chaque élément est appelé nœud (node en
anglais). L'élément <head> contient lui aussi deux enfants : <meta> et <title>. <meta> ne
contient pas d'enfant tandis que <title> en contient un, qui s’appelle #text. Comme son
nom l'indique, #text est un élément qui contient du texte.
En fait, alert()n'est pas vraiment une fonction. Il s'agit en réalité d'une méthode
appartenant à l'objet window. Mais l'objet window est dit implicite, c'est-à-dire qu'il n'y a
généralement pas besoin de le spécifier. Ainsi, ces deux instructions produisent le même effet,
à savoir ouvrir une boîte de dialogue :
window.alert('Hello world!');
alert('Hello world!');
2
1.3 L’objet document
L'objet document est un sous-objet de window, l'un des plus utilisés. Et pour cause, il
représente la page Web et plus précisément la balise <html>. C'est grâce à cet élément-là que
nous allons pouvoir accéder aux éléments HTML et les modifier.
Description :
La méthode getElementById() de Document renvoie un objet Element représentant
l'élément dont la propriété id correspond à la chaîne de caractères spécifiée. Étant donné
que les ID d'élément doivent être uniques, s'ils sont spécifiés, ils constituent un moyen utile
d'accéder rapidement à un élément spécifique.
Exemple :
<p id="intro">...</p>
<script>
var para = document.getElementById('intro');
alert(para);
</script>
Description :
Renvoie une liste des éléments sous forme de tableau ayant le nom de balise name. Cette
méthode est accessible sur n'importe quel élément HTML et pas seulement sur l'objet
document. En paramètre de cette méthode la chaîne de caractères contenant un astérisque
* récupérera tous les éléments HTML contenus dans l'élément ciblé.
Exemple :
var divs = document.getElementsByTagName('div');
for (var i = 0, c = divs.length ; i < c ; i++) {
alert('Element n° ' + (i + 1) + ' : ' + divs[i]);
}
Description :
La méthode querySelectorAll()de Element retourne une liste des éléments correspondants
aux sélecteurs CSS selecteurs.
3
Exemple :
Pour obtenir une liste des nœuds de tous les éléments <p> dans le document :
var r1 = document.querySelectorAll("p");
Cet exemple renvoie la liste de tous les éléments div du document dont l'attribut de classe a
pour valeur "note" ou "alert" :
var r2 = document.querySelectorAll("div.note, div.alert");
On obtient une liste des éléments <p> dont l'élément parent immédiat est un div avec la classe
"highlighted" et qui sont situés dans un conteneur dont l'identifiant est "test".
var c = document.getElementById("test");
var r3 = c.querySelectorAll("div.highlighted > p");
Méthode : querySelector()
Syntaxe :
document.querySelector(selectors)
Description :
La méthode querySelector() de l'interface Document retourne le premier Element dans le
document correspondant au sélecteur - ou groupe de sélecteurs - spécifié(s), ou null si
aucune correspondance n'est trouvée.
Exemple :
document.querySelector(".example");
Obtenir le premier avec class = "example"
document.querySelector("p.example");
Obtenir le premier élément <p> du document avec class = "example":
document.querySelector("a[target]");
Obtenir le premier élément <a> du document qui a un attribut target
Description :
getAttribute renvoie la valeur de l’attribut nom_attribut de l'élément spécifié. Si l'attribut
n'existe pas, la valeur renvoyée sera soit null soit "" (une chaîne vide)
Exemple :
<a id="monLien" href="mapage.html" target="att">Accéder aux attributs</a>.
<script>
var x = document.getElementById("monLien").getAttribute("href");
alert(x) ;
</script>
4
Méthode : setAttribute()
Syntaxe :
Element.setAttribute(name, value) ;
Description :
Ajoute un nouvel attribut ou change la valeur d'un attribut existant pour l'élément spécifié. Si
l'attribut existe déjà, la valeur est mise à jour ; sinon, un nouvel attribut est ajouté avec le nom
et la valeur spécifiés.
Exemple :
<a id="monLien" href="mapage.html" target="att">Accéder aux attributs</a>.
<script>
var x =
document.getElementById("monLien").setAttribute("href","new.html");
</script>
Description :
Pour la plupart des éléments courants comme <a>, il est possible d'accéder à un attribut via
une propriété.
Exemple :
<a id="monLien" href="mapage.html" target="att">Accéder aux attributs</a>.
<script>
var x = document.getElementById("monLien") ;
var t = x.href ;
alert(t) ;
x.href="new.html"
</script>
Propriété : className
Syntaxe :
var cName = element.className;
element.className = cName;
Description :
className définit et obtient la valeur de l'attribut class de l'élément spécifié.
Exemple :
<style>
.blue {
background: blue;
color: white;
}
</style>
<div id="monTexte">
<p>blablabla <p>
</div>
<script>
document.getElementById('myColoredDiv').className = 'blue';
</script>
5
3.2 Le contenu
Propriété : innerHTML
Syntaxe :
var x = element.innerHTML;
element.innerHTML = htmlString;
Description :
La propriété Element.innerHTML de Element récupère ou définit la syntaxe HTML décrivant
les descendants de l'élément.
Exemple :
<ul id="maListe">
<li>Café</li>
<li>Thé</li>
</ul>
<script>
var x = document.getElementById("maliste").innerHTML;
alert(x);
</script>
Le script affiche :
<li>Café</li>
<li>Thé</li>
document.body.innerHTML = "";
Propriété : textContent
Syntaxe :
var texte = element.textContent;
element.textContent = "ceci est un simple exemple de texte";
Description :
La propriété Node.textContent représente le contenu textuel d'un nœud et de ses
descendants.
Exemple :
<ul id="maListe">
<li>Café</li>
<li>Thé</li>
</ul>
<script>
var x = document.getElementById("maliste").textContent;
alert(x);
</script>
Le script affiche :
Café
Thé
6
<p id="demo"> Cet élément contient des espaces supplémentaires et
contient <span>un élément span</span></p>
<script>
alert("avec innerHTML "+document.getElementById("demo").innerHTML) ;
alert("avec textContent "+document.getElementById("demo").textContent) ;
</script>
Le script affiche
avec innerHTML Cet élément contient des espaces supplémentaires et contient <span> un
élément span</sapn>
avec textContent Cet élément contient des espaces supplémentaires et contient un élément
span
4.1 Propriétés
Propriété : parentNode
Syntaxe :
var x = node.parentNode
Description :
La propriété parentNode renvoie le nœud parent du nœud spécifié, en tant qu'objet Node.
Exemple :
<ul>
<li id="monLi">Coffee</li>
<li>Tea</li>
</ul>
<script>
var x = document.getElementById("monLi").parentNode.nodeName;
alert(x);
</script>
Le script affiche UL
Description :
nodeType et nodeName servent respectivement à vérifier le type d'un nœud et le nom d'un
nœud. nodeType retourne un nombre, qui correspond à un type de nœud.
Numéro Type de nœud
1 Nœud élément
2 Nœud attribut
3 Nœud texte
8 Nœud pour commentaire
7
Exemple :
<p id="monPara"> Ceci est un paragraphe </p>
<script>
var p = document.getElementById('monPara');
alert(p.nodeType + '\n' + p.nodeName);
</script>
Le script affiche :
1
P
Description :
firstChild et lastChild servent respectivement à accéder au premier et au dernier enfant
d'un nœud.
Exemple :
<p id="monPara">Un peu de texte, <a>un lien</a> et <strong>une portion en
emphase</strong></p>
<script>
var paragraph = document.getElementById('monPara');
var first = paragraph.firstChild;
var last = paragraph.lastChild;
alert(first.nodeName);
alert(last.nodeName);
</script>
Le script affiche :
#text
STRONG
Propriété : nodeValue
Syntaxe :
valeur = node.nodeValue;
Description :
Pour le nœud lui-même, nodeValue renvoie null. Pour des nœuds texte nodeValue renvoie
le contenu du nœud. Pour les nœuds d'attributs, il s'agira de la valeur de l'attribut.
Exemple :
<p id="monPara">Un peu de texte, <a>un lien</a> et <strong>une portion en
emphase</strong></p>
<script>
var paragraph = document.getElementById('monPara');
var first = paragraph.firstChild;
var last = paragraph.lastChild;
alert(first.nodeValue);
8
alert(last.nodeValue);
alert(last.fristChild.nodeValue);
</script>
Le script affiche :
Un peu de texte,
null
une portion en emphase
Propriété : childNodes
Syntaxe :
var enfants = element.childNodes;
Description :
La propriété en lecture seule Node.childNodes renvoie une liste de nœuds enfants de
l'élément donné avec le premier nœud enfant affecté à l'index 0.
Exemple :
<p id="monPara">Un peu de texte, <a>un lien</a> et <strong>une portion en
emphase</strong></p>
<script>
var paragraph = document.getElementById('monPara');
var enfants = paragraph.childNodes;
for (var i = 0, c = enfants.length; i < c; i++)
{
if (enfants[i].nodeType == 1) { // C'est un élément HTML
alert(i+" "+enfants[i].firstChild.nodeValue);
} else { // C'est certainement un noeud textuel
alert(i+" "+enfants[i].nodeValue);
}
}
</script>
Le script affiche
0 Un peu de texte,
1 un lien
2 et
3 une portion en emphase
Description :
La propriété en lecture seule Node.nextSibling renvoie le nœud suivant immédiatement le
nœud spécifié dans la liste des enfants de son nœud parent, ou null si le nœud spécifié est le
dernier dans cette liste.
9
La propriété en lecture seule Node.previousSibling renvoie le nœud précédant
immédiatement le nœud courant dans la liste de son parent, ou null s'il s'agit du premier
nœud de la liste.
Exemple :
<p id="myP">Un peu de texte, <a>un lien</a> et <strong>une portion en
emphase</strong></p>
<script>
var paragraph = document.getElementById('myP');
var first = paragraph.firstChild;
var last = paragraph.lastChild
alert(first.nextSibling.firstChild.nodeValue); // Affiche « un lien »
alert(last.previousSibling.nodeValue); // affiche « et »
</script>
Méthode : createElement()
Syntaxe :
var element = document.createElement(tagName);
Description :
Crée un élément HTML du type spécifié par tagName ou un HTMLUnknownElement si tagName
n’est pas reconnu.
Exemple :
var newLink = document.createElement('a');
Méthode : appendChild()
Syntaxe :
var elementAjoute = element.appendChild(enfant);
Description :
La méthode Node.appendChild() ajoute un nœud à la fin de la liste des enfants d'un nœud
parent spécifié. Si l'enfant donné est une référence à un nœud existant dans le document,
appendChild() le déplace de sa position actuelle vers une nouvelle position.
Exemple :
document.getElementById('myP').appendChild(newLink);
Méthode : createTextNode()
Syntaxe :
var text = document.createTextNode(données);
Description :
Crée un nouveau nœud de texte.
Exemple :
var newLinkText = document.createTextNode("Iset Sousse");
newLink.appendChild(newLinkText);
10
Méthode : cloneNode()
Syntaxe :
var dupNode = node.cloneNode([deep]);
deep Facultatif (profondeur)
true (vrai) si les enfants du nœud doivent aussi être clonés ou false
(faux) si seul le nœud spécifié doit l'être.
Description :
La méthode Node.cloneNode() renvoie une copie du nœud sur lequel elle a été appelée.
Exemple :
// On va cloner un élément créé :
var hr1 = document.createElement('hr');
var hr2 = hr1.cloneNode(false); // ne pas cloner les enfants
/* L'élément est cloné, mais pas « inséré » tant que l'on n'a pas appelé
appendChild() :*/
paragraph1.parentNode.appendChild(paragraph2);
Méthode : replaceChild()
Syntaxe :
replacedNode = parentNode.replaceChild(newChild, oldChild);
Description :
La méthode Node.replaceChild() remplace un nœud enfant du nœud spécifié par un autre
nœud.
Exemple :
<p id="myP">Un peu de texte <a>et un lien</a></p>
<script>
var link = document.querySelector('a');
var newLabel = document.createTextNode('et un hyperlien');
link.replaceChild(newLabel, link.firstChild);
</script>
Méthode : removeChild()
Syntaxe :
var oldChild = node.removeChild(child);
ou
node.removeChild(child);
11
Description :
La méthode Node.removeChild() retire un nœud enfant de l'arbre DOM et retourne le nœud
retiré.
Exemple :
var link = document.querySelector('a');
var oldLink = link.parentNode.removeChild(link); /* On supprime l'élément
et on le garde en stock */
document.body.appendChild(oldLink); /* On réintègre ensuite l'élément
supprimé où on veut et quand on veut*/
Méthode : hasChildNodes()
Syntaxe :
resultat =element.hasChildNodes();
Description :
La méthode Node.hasChildNodes() renvoie une valeur booléenne indiquant si le nœud
actuel possède des nœuds enfants ou non
Exemple :
<p id="myP">Un peu de texte <a>et un lien</a></p>
<script>
var paragraph = document.querySelector('p');
alert(paragraph.hasChildNodes()); // Affiche true
</script>
Méthode : insertBefore()
Syntaxe :
var insertedNode = parentNode.insertBefore(newNode, referenceNode);
Description :
La méthode Node.insertBefore() insère un nœud juste avant le noeud de référence en tant
qu'enfant du nœud parent spécifié. Si l'enfant donné est une référence à un noeud existant
dans le document, insertBefore() le déplace vers sa nouvelle position
Exemple :
<p id="myP">Un peu de texte <a>et un lien</a></p>
<script>
var paragraph = document.querySelector('p');
var emphasis = document.createElement('em'),
emphasisText = document.createTextNode(' en emphase légère ');
emphasis.appendChild(emphasisText);
paragraph.insertBefore(emphasis, paragraph.lastChild);
</script>
12