Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
Dans le chapitre précédent nous nous sommes contentés de modifier les caractéristiques d'éléments existants.
Dans ce chapitre nous irons plus loin dans la modification du DOM initial.
En cliquant sur le premier bouton de commande : les textes des deuxième et troisième paragraphes sont coloriés.
En cliquant sur le deuxième bouton de commande : la boite DIV a un fond rose.
function f1()
{
let boite = document.querySelector('div');
let aine_boite = boite.firstElementChild ;
// premier enfant de DIV
let cadet_boite = boite.lastElementChild ;
// dernier enfant de DIV
aine_boite.style.color ="red";
cadet_boite.style.color ="green";
}
function f2()
{
var enfant = document.querySelectorAll('p')[1];
// deuxième paragraphe
var parent = enfant.parentElement;
// DIV parent du deuxième paragraphe
parent.style.background ="pink";
}
Notez que le bouton de commande disparait après avoir été cliqué.
function f1()
{
let page = document.body;
let pneo = document.createElement('p');
let texteneo = document.createTextNode('Nouveau texte');
pneo.textContent = 'Texte du nouveau paragraphe';
page.prepend(pneo);
page.append(texteneo);
let boite = document.querySelector('div');
let pneo2 = document.createElement('p');
pneo2.innerHTML = 'Nouveau paragraphe dans DIV' ;
boite.appendChild(pneo2);
document.querySelector('button').remove();
}
Observez l'onglet 'éléments' de la console du navigateur.
Il faut ensuite insérer ces nouveaux éléments.
function f1()
{
let page = document.body;
let premier = document.querySelector('p');
premier.remove();
let dernier = document.getElementById('dernier');
page.removeChild(dernier);
document.querySelector('button').remove();
}
Plutôt que de créer un nouvel élément de toute pièce on peut cloner un élément existant.
À chaque fois que vous cliquez sur le bouton de commande il y a clonage de la boite.
Affichez l'onglet "éléments" de la console du navigateur pour observer la modification du DOM.
document.querySelector('button').onclick = function()
{
var original = document.getElementById("boite1");
var page = document.body;
var clone = original.cloneNode(true);
page.appendChild(clone);
}
...
Il faut utiliser la méthode cloneNode() puis appendChild().
La méthode cloneNode() crée une copie du noeud.
Si l'argument est true Les enfants du noeud sont aussi copiés. Ainsi dans l'exemple
il est copié non seulement le noeud DIV mais aussi le noeud P, enfant de DIV.
La méthode cible.appendChild(clone) insère le clone dans la clible (en dernier).
Après un clic sur le bouton de commande deux paragraphes ont été déplacés.
Notez que certains éléments P sont identifiés.
document.querySelector('button').onclick = function()
{
let page = document.body;
let p1 = document.getElementById('p1');
let p2 = document.getElementById('p2');
let p4 = document.getElementById('p4');
//On déplace p1 juste avant p4 dans le DOM
page.insertBefore(p1, p4);
// on déplace p2 dans la boite DIV
let boite =document.querySelector('div');
boite.appendChild(p2);
//
}
Je vous propose en guise de synthèse deux documents HTML où le DOM initial est profondément modifié par le script.
Cliquez sur les deux boutons de commande et observez ...
La page est mise en forme et un image est insérée.
Ni feuille de style interne, ni lien vers une feuille de style externe. Donc style par défaut.
var page = document.body;
document.querySelector('button').onclick = function()
{
var lien =document.createElement('link');
lien.href ="../style.css";
lien.rel ="stylesheet";
document.querySelector('head').appendChild(lien);
document.querySelector('p').textContent ="Page désormais plus jolie !!!" ;
page.removeChild(this);
// suppression bouton
}
document.querySelectorAll('button')[1].onclick = function()
{
var image =document.createElement('img');
image.src ="../images/bikini.jpg";
image.alt ="jolie fille en bikini";
image.style.width ="300px";
image.style.display ="block";
image.style.margin ="10px auto";
document.querySelector('section').appendChild(image);
page.removeChild(this);
//suppression bouton
}
La première fonction crée et insère un élément de type LINK.
La deuxième fonction crée et insère un élément de type IMG.
Chaque fonction supprime le bouton qui l'appelle d'où l'emploi du mot "this".
À chaque seconde : une nouvelle image est insérée.
Cliquez sur le bouton de commmande pour mettre fin à l'insertion automatique d'images.