ℹ️ How browsers work
ℹ️ Front-end Developer Handbook
Avec la balise <script>
<script>
<!DOCTYPE html> <html> <head> <script> // Exécuté en premier console.log("Script in head"); </script> </head> <body> JS Demo <script> // À la fin, lorsque la page est chargée console.log("Script at the end of body"); </script> </body> </html> <!-- Le navigateur interprète le fichier du haut vers le bas les scripts seront executé au moment lu dans le fichier -->
Avec un fichier externe
<!DOCTYPE html> <html> <head> <script src="head.js"></script> </head> <body> External JS Demo <script src="body.js"></script> </body> </html>
//Fichier head.js console.log("External script in head");
//Fichier body.js console.log("External script in body");
Structure du DOM
Récupérer, Modifier, Manipuler la structure
document
getElementById('id');
document.getElementById('header'); // Autres fonctions pouvant être appliquées au document OU 1 element ELEMENT.getElementsByClassName('paragraph'); // [] ELEMENT.getElementsByTagName('p'); // [] ELEMENT.querySelector('#title'); // 1 element ELEMENT.querySelectorAll('div .paragraph'); // [] ELEMENT.children; // [] ELEMENT.parent; // 1 element
📚 Références JavaScript des element et du document
📚 Référence Sélecteurs CSS 🎮 CSS Diner
let firstParagraph = document.getElementById('p1'); firstParagraph.textContent = 'New <b>text</b>!'; // Texte BRUT de la balise firstParagraph.innerHTML = '<button>Click here!</button>'; // Contenu HTML de la balise firstParagraph.style.backgroundColor = 'blue'; // != background-color firstParagraph.className = 'myClass'; // != class document.getElementById('logo').src = '/img/logo.jpg';
📚 Propriétés CSS disponibles
let newParagraph = document.createElement('p'); newParagraph.innerHTML = 'Le texte...'; PARENT_ELEMENT.appendChild(newParagraph); PARENT_ELEMENT.insertBefore(newParagraph, ELEMENT); ELEMENT.remove(); // s'enleve lui-meme PARENT_ELEMENT.removeChild(ELEMENT); // son conteneur l'enleve PARENT_ELEMENT.replaceChild(newParagraph, ELEMENT);
📚 Manipulations du DOM
Par défaut, le navigateur fourni également 3 boîtes de dialogue
alert("Hey!"); const ok = confirm("Are you sure?"); console.log(`Confirm = ${ok}`); const name = prompt("What is your name?"); console.log(`Prompt = ${name}`); // Attention, quelle est la différence entre annuler le prompt et confirmer sans rien écrire?
Pour les besoins du cours, nous nous concentrerons sur le navigateur web Google Chrome. En général, les navigateurs récents fournissent un ensemble similaire d'outils développeur :
📚 Chrome DevTools, Chrome DevTools pour JavaScript
📚 Outils développeur de Chrome et Firefox
La console, accessible dans les outils pour développeur, permet un déboguage simple et rapide
console.log( ) | info( ) | debug( ) | warn( ) | error( ) //Et avec style! %c console.log("%cHello %cWorld", "color: red; font-size: xx-large", "color: blue;") console.table(["a", "b", "c"]) console.assert(condition, "affiche seulement si condition est FAUX") console.clear()
ℹ️ Plus d'options pour l'affichage à la Console
📚 Documentation Console
On peut utiliser console.log pour comprendre le chemin emprunté par notre code
console.log
Les navigateurs web modernes supportent le mécanisme de points d'arrêts
debugger;
📚 Debugging in Chrome
// Utiliser VS Code pour créer vos fichiers HTML et JS // On doit ouvrir le fichier HTML dans le navigateur // Le JS sera executé lors de l'interpretation du HTML // Ne pas oublier de recharger la page après chaque changement au code! // Ouvrir la Console des outils développeur pour surveiller les erreurs JS // Dans le HTML, on inclut le JavaScript // Il est preferable de séparer le JS dans un fichier distinct // <script src="script.js"></script> // Il faut choisir judicieusement l'endroit de chargement de notre script // Dans le head pour les utilitaires // A la fin du body si le JS manipule le DOM au chargement // Intégrer le JS suivant, dans le head // et // À la fin du body function logBody() { console.log('Function logBody'); console.log(document.body); } console.log('Execution au chargement'); console.log(document.body); // Appeler manuellement la fonction via la Console // La console offre un environnement d'execution JavaScript complet, // comme si le code faisait partie de notre fichier // On peut ajouter un point d'arrêt et inspecter les valeurs des variables function sum(number) { debugger; // point d'arret let total = undefined; // 1 + 2 + 3 + ... + number if (Number.isInteger(number) && number > 0) { total = 0; for(let i = 1; i <= number; i++) { total += i; } } return total; } // // Manipulation DOM // // Modifier la fonction sum() pour construire un affichage dans le DOM // Si le paramètre reçu n'est PAS un entier supérieur à 0, afficher un message en rouge // Sinon, afficher en bleu le résultat du calcul // Tester script dans le head vs body // Appeler la fonction pour accélérer le développement function sum(number) { let p = document.getElementById('result'); if (p == null) { p = document.createElement('p'); p.id = 'result'; document.body.appendChild(p); } let total = undefined; // 1 + 2 + 3 + ... + number if (Number.isInteger(number) && number > 0) { total = 0; for(let i = 1; i <= number; i++) { total += i; } } if (total == undefined) { p.innerHTML = 'Pas un nombre superieur a 0!'; p.style.color = 'red'; } else { p.innerHTML = `Résultat = ${total}`; p.style.color = 'blue'; } } sum(10);
👉 Énoncé