<div>
<p id="myP">Du texte, <a>un lien</a> et aussi<strong>une portion en gras</strong></p>
</div>
<script>
var paragraph = document.getElementById('myP');
var first = paragraph.firstChild;alert(first.nodeName.toLowerCase()); -> nom du nœud #text
firstElementChild ; -> renvoi le premier élément HTML soit <a>
var last = paragraph.lastChild; alert(last.nodeName.toLowerCase()); (gras)
lastElementChild; -> renvoi le dernier élément HTML <strong>
Récupérer le texte en gras
alert(last.firstChild.data); // le texte en gras est le premier enfant du nœud <strong> qui lui est le dernier enfant du paragraphe. Ok ?
childNodes retourne un tableau contenant la liste des enfants d'un élément
var paragraph = document.getElementById('myP');
var children = paragraph.childNodes;
for (var i = 0, c = children.length; i < c; i++) {
if (children[i].nodeType === 1) { // C'est un élément HTML
alert(children[i].firstChild.data);
} else { // C'est certainement un nœud textuel
alert(children[i].data);
}
}
//nextSibling et previousSibling permettent d'accéder au nœud suivant et au précédent.
Les attributs firstElementChild, lastElementChild, nextElementSibling et previousElementSibling ne retournent que des éléments HTML et permettent donc d'ignorer les nœuds textuels.
NOTA La variable newLink contient en réalité une référence vers l'élément <a> qui a été créé. newLink ne contient pas l'élément, il contient une adresse qui pointe vers ce fameux <a>. Une fois que l'élément HTML est inséré dans la page, on peut y accéder de nombreuses autres façons, comme avec getElementById(). Quand on accède à un élément via getElementById(), on le fait aussi au moyen d'une référence
Cloner un élément
Pour cloner un élément : cloneNode(). Cette méthode requiert un paramètre booléen ( true ou false) : si vous désirez cloner le nœud avec (true) ou sans (false) ses enfants et ses différents attributs.
exemple : on crée un élément <hr />, et on en veut un deuxième, donc on clone le premier :
// On va cloner un élément créé :
varhr1=document.createElement('hr');
varhr2=hr1.cloneNode(false);// Il n'a pas d'enfantsÂ
// Ici, on clone un élément existant :
varparagraph1=document.getElementById('myP');
varparagraph2=paragraph1.cloneNode(true);
// Et attention, l'élément est cloné, mais pas « inséré » tant que l'on n'a pas appelé appendChild() :
paragraph1.parentNode.appendChild(paragraph2);
Remplacer un élément par un autre
Pour remplacer un élément par un autre, rien de plus simple, il y a replaceChild(). Cette méthode accepte deux paramètres : le premier est le nouvel élément, et le deuxième est l'élément à remplacer. Tout comme cloneNode(), cette méthode s'utilise sur tous les types de nœuds (éléments, nœuds textuels, etc.).
Dans l'exemple suivant, le contenu textuel (pour rappel, il s'agit du premier enfant de <a>) du lien va être remplacé par un autre. La méthode replaceChild() est exécutée sur l'élément <a>, c'est-à-dire le nœud parent du nœud à remplacer.
<div> <p id="myP">Un peu de texte <a>et un lien</a></p> </div>
<script>
var link = document.querySelector('a');
var newLabel = document.createTextNode('et un hyperlien');
link.replaceChild(newLabel, link.firstChild);
Supprimer un élément
Pour insérer un élément, on utilise appendChild(), et pour en supprimer un, on utilise removeChild(). Cette méthode prend en paramètre le nœud enfant à retirer. Si on se calque sur le code HTML de l'exemple précédent, le script ressemble à ceci :
varlink=document.querySelector('a');
link.parentNode.removeChild(link);
à noter que la méthode removeChild() retourne l'élément supprimé, ce qui veut dire qu'il est parfaitement possible de supprimer un élément HTML pour ensuite le réintégrer où on le souhaite dans le DOM :
varlink=document.querySelector('a');
varoldLink=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ù et quand on veut