Emery
REMARQUE : Pour accéder à un élément précis, on ajoute [indice] à la fin de la méthode, en précisant
l’indice de l’élément. Le premier indice est 0, donc l’indice d’un élément donné est équivalent à sa
position dans l’arborescence DOM moins un. Il en va de même pour les méthodes suivantes.
1
Cours 7 – Modification HTML par JS 3INOC – 2013-14 B. Emery
sélecteur CSS comme p.ex. "#menu .item a", qui correspond à tous les éléments <a> contenus dans
un élément de classe item, lui-même contenu dans l’élément d’id menu.
Par exemple :
function getElementsByTitle(titre) {
var resultat=new Array(), toutesBalises= document.getElementsByTagName('*');
for (var i=0; i<toutesBalises.length; i++) {
if (toutesBalises[i].getAttribute('title')
&& toutesBalises[i].getAttribute('title')==titre)
{resultat.push(toutesBalises[i]);}
}
return resultat ;
}
Le DOM est organisé tel un arbre, en commençant par le tronc (document), les balises sont rattachées
les unes aux autres en fonction de leur parenté. Chaque élément est appelé « nœud ». Le contenu
d’une balise est également un nœud.
Toutefois, pour la plupart des balises « classiques », leurs attributs sont directement accessibles en
notation pointé (il s’agit d’une propriété). Dans l’exemple précédent, il aurait été plus court d’utiliser
la propriété .title. Comme autre exemple, l’attribut href d’une balise <a> peut être accédé (en lecture
ou en écriture) directement en ajoutant .href à la fin de la notation pointée de l’élément.
2
Cours 7 – Modification HTML par JS 3INOC – 2013-14 B. Emery
Malheureusement, cela n’est pas vrai pour tous les attributs. Parfois, c’est simplement le nom de
l’attribut qui change, comme par exemple pour la classe ou il faut utiliser .className. D’autres fois,
la propriété correspondante n’existe simplement pas. Dans le cas du SVG, cela se complique
également, comme indiqué ci-dessous.
Le cas du SVG :
Le DOM des objets SVG est un peu plus compliqué qu'il n'y parait. Ainsi, l'utilisation d'une notation
pointée pour modifier certains attributs peut être source d'erreur.
Comme d'habitude, pour manipuler cet objet, il faut préalablement l'associer à une variable JS :
var monObjet=document.getElementById('rectangle');
Pour modifier la position de ce rectangle, il suffit de modifier les valeurs des paramètres x et y. Et
c'est là que les choses se compliquent. Nous aurions pu nous attendre à une notation simple du
genre: « monObjet.x = 10; », mais cette ligne de code ne fonctionnera pas.
En effet, en raison des instructions d'animation propre à SVG, le DOM des éléments SVG est moins
intuitif. Ainsi, pour modifier cette valeur x, il faut utiliser l'instruction suivante :
monObjet.x.baseVal.value=10;
De la même manière, pour modifier un attribut de style, il faut passer par une notation plus
compliquée, car il s’agit en réalité d’information de CSS. Ainsi modifier la couleur de remplissage se
fait ainsi : monObjet.style.fill="blue";
Pour résumer, afin d'altérer certains attributs des objets SVG, il faut soit passer par la méthode
.setAttribute(), soit utiliser une notation pointée plus complexe que celle des éléments HTML, dont la
syntaxe générale est :
Pour les dimensions : .attribut.baseVal.value= valeur;
Pour le style : .style.attribut = valeur;
3
Cours 7 – Modification HTML par JS 3INOC – 2013-14 B. Emery
Les opérateurs
L’assignation à une variable : =
Pour assigner une valeur à une variable, on utilise le symbole =. Ainsi maVariable = 5; permet
d’assigner à cette variable le nombre 5.
Lorsque l’on souhaite ajouter une valeur (nombre ou texte) à ce que contient déjà une variable, on
utilise l’opérateur += à la place de =. Bref, total = total +3; peut être remplacé par total += 3;.
Finalement, pour incrémenter le total d’une variable numérique de 1, on peut utiliser l’opérateur ++.
Ainsi total = total +1; ou total+=1; est équivalent à total++;. Il est aussi possible d’écrire ++total;,
mais cela n’a pas tout à fait la même signification. Dans la plupart des cas, cela n’aura pas d’influence,
mais si le ++ se situe avant la variable, cela signifie qu’elle est incrémentée avant d’être transmise
alors que dans l’autre cas, cela se fait après. P.ex :
var v=0;
alert(v++ +' '+ v); // Affichera "0 1"
v=0;
alert(++v +' '+ v); // Affichera "1 1"
La soustraction : -, -=, --
A l’instar de l’addition, l’opérateur de soustraction fonctionne de la même manière, mais uniquement
pour les valeurs numériques.
Les comparateurs
Les comparateurs permettent d’effectuer des comparaisons, très utiles pour les conditions. Le résultat
d’une comparaison est true ou false.
Les comparateurs plus petit (<) ou égal (<=) et plus grand (>) ou égal (>=)
Est-il vraiment nécessaire de préciser la signification de ces comparateurs ?
4
Cours 7 – Modification HTML par JS 3INOC – 2013-14 B. Emery
Si, sinon si, sinon : if (condition) {instruction;} else if (condition) {instruction;} else
{instruction;}
La structure conditionnelle de base est if (condition) {instruction;} qui effectue l’instruction (ou les
instructions) indiquée(s) entre { } si la (ou les) condition(s) indiquée(s) entre ( ) est vraie.
A cette structure de base, on peut ajouter un « sinon » else {instruction;} qui effectue d’autres
instructions dans le cas où la condition précédemment donnée est fausse.
Il est possible d’enchainer les sinon (else) et les si (if) pour créer de grandes structures
conditionnelles. Toutefois, lorsqu’il faut détailler plusieurs instructions différentes pour un très grand
nombre de cas, il est recommandé d’utiliser plutôt la structure switch, présentée ci-après.
Dans le cas de : switch (variable) {case "valeur1" : instruction; break; default : instruction;}
Avec cette structure, on peut assigner des instructions à chaque valeur possible de la variable
soumise. La structure commence avec le mot-clé switch suivi de la variable soumise entre
parenthèses. Les cas possibles sont indiqués entre les accolades qui, comme pour les autres structures
ne s’achèvent pas avec un ;. Chaque cas commence par case suivi de la valeur. Les instructions sont
indiquées après les : et s’achève avec l’instruction break;. Il est possible de créer autant de cas qu’il y
a de valeur possible. On peut également achever les cas avec le mot-clé default : qui permettra
d’exécuter des instructions si aucun cas précédent ne s’applique. Il n’est pas nécessaire d’achever
celles-ci avec break; car étant le dernier cas, la structure se termine forcément après cela.
5
Cours 7 – Modification HTML par JS 3INOC – 2013-14 B. Emery
Exemple :
var soumis=prompt("Entrez un chiffre entre 1 et 3") ;
// on demande d’entrer un chiffre, mais prompt renvoie forcément un caractère.
switch (soumis) {
case "1" : alert("Vous avez entré la valeur 1") ; break ; // essayer d’omettre les break pour
case "2" : alert("Vous avez entré la valeur 2") ; break ; // voir ce qu’il se passe.
case "3" : alert("Vous avez entré la valeur 3") ; break ;
default : alert("Vous n’avez pas entré une valeur autorisée !") ;
} // on n’achève pas une structure avec ;
Les boucles
Pour un certain nombre de fois : for (var variableIncr=valeur_initiale ;
conditionDeContinuation ; incrémentation) {instruction;}
La boucle for permet d’exécuter une instruction pour un certain nombre de fois. Celui-ci peut être
déterminé par une variable ou directement par une valeur. Une variable d’incrémentation est
également définie et est utilisée comme compteur. La condition indiquée en argument est celle qui
permet de continuer. Ainsi, tant qu’elle est vraie, la boucle est effectuée. Par conséquent, utiliser la
condition true, créerait une boucle infinie et planterait la machine. Heureusement, la plupart des
navigateurs modernes disposent d’un mécanisme de sécurité permettant d’éviter cela. Le dernier
argument est l’incrémentation. Celle-ci est réalisée après l’exécution des instructions indiquées entre
les { }.
Exemple :
var factoriel=parseInt(prompt("Entrez le factoriel à calculer")), resultat=1 ;
// on utilise parseInt() pour convertir le caractère en un nombre, même si cela n’est pas nécessaire.
for (var i=1 ; i<=factoriel ; i++) {resultat*=i ;} // calcul le résultat.
alert("Le résultat de " + factoriel +"! est : " + resultat); // affiche le résultat.
Si la condition est fausse dès le début, alors les instructions ne seront pas exécutées. Une variante de
cette boucle existe pour qu’une itération soit toujours exécutée : do {instruction ;} while (condition);.
Vous l’avez probablement remarqué, mais exceptionnellement, cette structure s’achève avec un ;.
6
Cours 7 – Modification HTML par JS 3INOC – 2013-14 B. Emery
Les minuteries.
Minuterie répétitive :
Il est possible de créer une minuterie « répétitive » à l’aide de la méthode JS de l’objet window :
setInterval("maFonction()", intervalle);. Avec cette méthode, la fonction spécifiée est exécutée
toutes les « x » millisecondes, selon l’intervalle spécifié.
Retardateur :
Pour un simple déclanchement retardé sans répétition, on utilise setTimeout("maFonction()",
intervalle);.
REMARQUE : Comme le JavaScript est asynchrone, les instructions suivant les minuteries sont
exécutées immédiatement, et non après la fin de celles-ci.
1. Changer la couleur du fond de la page en cliquant sur celle-ci. Faire une rotation des 7
couleurs de l’arc-en-ciel.
2. Afficher dans une balise, le contenu d’une autre balise sur laquelle vous avez cliqué.
3. Réalisez une page qui vous permet de calculer différentes formules mathématiques ou
physiques lorsqu’on clique dessus.
4. Créer un menu déroulant ou simplement des liens « masquer/afficher » en modifiant la
propriété display ou la propriété visibility de l’attribut style d’une balise. Dans la CSS,
utilisez la déclaration cursor : pointer; pour modifier l’icône de la souris au-dessus de
l’élément cliquable.
5. Faire un diaporama de plusieurs images qui défilent au clic sur une photo. Rendre le
diaporama automatique à l’aide d’une minuterie.
6. Déplacer un cercle en SVG pour qu’il rebondisse sur les bords du SVG.
7. Déplacer un cercle en SVG selon une trajectoire balistique (retrouvez les formules
mathématique du MRUA dans vos cours de phyisique).
Principales références :
Site du W3C : http://www.w3.org
DYNAMISER VOS SITES WEB AVEC JAVASCRIPT, J. Pardanaud et S. De La Marck, Site du Zéro 2012