le Document objet model plus généralement appelé dom permet d'avoir accès dynamiquement a la page. Grâce a lui on peut créer modifier et supprimer les élément d'une page, il fournis aussi plusieurs méthodes afin de se positionner dans une page grâce a la représentation de la page similaire a un arbre généalogique, il permet aussi d'obtenir des information sur un élément comme sa position sa taille ses attributs ...etc
une balise a une utilité particulière la balise a sert a crée des liens la balise img a afficher une image la balise div sert de conteneur la balise video permet d'afficher une video ...etc et a l'intérieure de chaque balise on retrouve les attributs certains de ces attributs peuvent se retrouvé dans toutes les balises c'est le cas pour id ou pour style et d'autres attributs son spécifique a une balise prenons comme exemple la balise <a> et l'attribut href que l'on retrouve uniquement dans cette balise.
quelques exemples d'attributs
attributs | |
---|---|
id name class style evenements | toutes_balises |
type | input |
src | img, audio, video |
href | a |
height width | img,canvas, audio, video |
controls preload autoplay poster loop buffered | audio et video |
readonly | input textarea select |
la création consiste a crée une balise et a lui adjoindre des attributs.
on crée une balise grâce a la méthode createElement qui appartient a l'objet document elle sera donc toujours précédé de document et on vas stocké cette balise dans une variable temporaire afin de lui adjoindre ces attributs avant insertion dans le document
var elem=document.createElement('input');
pour insérer l'élément on utilise les méthode que propose le dom elles seront vue plus bas mais pour l'exemple on utilisera appendChildqui insère un élément dans un autre.
var elem=document.createElement('input'); document.body.appendChild(elem);
on peut aussi insérer un élément crée dans un autre élément crée
var elem=document.createElement('div'); var elem2=document.createElement('input'); elem.appendChild(elem2); document.body.appendChild(elem);
createElementNS est utiliser pour les elements ayant un espace de nom particulier c'est le cas pour les elements SVG, Avant de preciser le nom de la balise on precisera en premier l'URI de l'espace de nom. Il est imperatif d'utiliser cette méthode afin d'interpreter du SVG.
var svgNS = "http://www.w3.org/2000/svg"; var gvs = document.createElementNS(svgNS,"svg"); var cercle=document.createElementNS(svgNS,"circle"); gvs.appendChild(cercle); document.body.appendChild(gvs);
la gestion des attributs se fait de deux facons.
la première consiste a donner le nom de l'attribut.
a la creation
var elem=document.createElement('input'); elem.id='un_id'; elem.type='password'; elem.onmouseout=une_fonction
de la meme facon on peut modifier ou ajouter l'attribut d'un element existant
var elem=document.getElementById("un_element"); elem.id='un_id'; elem.type='password'; elem.onmouseout=une_fonction
et enfin cette méthode permet de connaitre la valeur d'un attribut.
var elem=document.getElementById("un_element"); alert(elem.id) //renvoie "un_element"
pour la creation ou la modification d'element svg cette méthode ne fonctionne pas.
setAttribute creer un attribut et prend comme paramètre le nom de l'attribut et sa definition.
var elem=document.createElement('input'); elem.setAttribute('id','un_id'); elem.setAttribute('type','password'); elem.setAttribute('onmouseout','une_fonction()');
ou si l'element existe
var elem=document.getElementById("un_element"); elem.setAttribute('id','un_id'); elem.setAttribute('type','password'); elem.setAttribute('onmouseout','une_fonction()');
si l'element possede déja un des attributs il sera remplacé
pour la creation ou la modification d'element svg seule cette méthode fonctionne.
hasAttribute sans S a la fin permet de savoir si un element pocede l'attribut donné en parametre retourne true ou false.
if(elem.hasAttribute("id")){ alert("l'element a un id") }
hasAttributes avec un S a la fin indique si l'element courant a au moins un attribut. retourne true ou false.
if(elem.hasAttributes()){ alert("l'element a au moins un attribut") }
attributes retoune une nodeliste de l'element spécifié contenant tous les attribut de l'element. On parcoure cette liste grace a une boucle qui retourne le nom de chaques attributs ainsi que la valeur grace a name et value.
Comme une nodeliste possede l'attribut length on s'en servira pour connaitre le nombre d'attributs que possede l'element sélectionné.
function liste_class(){ var liste=document.getElementById("un_element").attributes alert(liste.length) for(var i=0; i < liste.length; i++){ alert(liste[i].name + "=" + liste[i].value); } }
getAttribute sert a connaitre la valeur d'un attribut.
var elem=document.getElementById("un_element"); alert(elem.getAttribute(id)); //renvoie "un_element"
pour supprimer un attribut on utilise removeAttribute en specifiant le nom de l'attribut.
var mon_element=document.getElementById("un_element"); mon_element.removeAttribute('id')
dataset permet d'acceder et de modifier les attribut préfixé avec "data-"
<div id="le_div" data-un_nom="le_nom"> du contenu..... </div>
pour acceder a la valeur d'un data-attribut on spécifie l' élément, puis le dataset concerné.
pour modifier la valeur d'un data-attribut on spécifie l' élément puis le dataset concerné et on ajoute la nouvelle valeur.
var element = document.getElementById('le_div'); var valeur_du_data_attribut=element.dataset.un_nom; // le_nom element.dataset.un_nom="nouvelle_valeur";
pour définir le style d'un élement il y a plusieurs façons de proceder.
la méthode style ne definit pas un style globale mais defini un attribut de style a la fois.cette méthode permet d'ajouter de modifier et de connaitre un attribut de style avec une syntaxe unique.
Quand un attribut comporte deux mots séparé par un tiret on ne met pas de tiret et le deuxieme mot commence par une majuscule.
background-color devient backgroundColor
margin-left devient marginLeft
pour les attributs css ayant un nom reservé par javascript c'est le cas pour float on rajoute css au début de l'attribut et l'attribut commencera par une majuscule
float devient cssFloat
mon_element.style.height='50px' mon_element.style.height='50px' alert(mon_element.style.height) //retourne 50px mon_element.style.height='70px' alert(mon_element.style.height) //retourne 70px mon_element.style.backgroundColor='blue' mon_element.style.marginLeft='20px' mon_element.style.cssFloat='right'
dans l'exemple suivant on cree une animation de déplacement en utilisant les marges
<!DOCTYPE html> <html> <head> <script type="text/javascript"> var position=0; function deplacement(){ position=position+20; var mon_element=document.getElementById("element_a_deplacer"); mon_element.style.marginLeft=position+'px'; if(position<=300){ setTimeout(deplacement,50); } } </script> </head> <body> <div id="element_a_deplacer" style='margin-left:0px;height:30px;width:30px;background:red;'></div> <br> <button onclick='deplacement()'>teste</button> </body> </html>
style ne permet pas de connaître le style définit dans une feuille de style. Pour exemple prenons un div qui au chargement de la page est défini dans la feuille de style comme non affiché (display:none). et un bouton qui au clic renvoi a une fonction qui se charge d'affiché ou de caché le div on ferait comme ceci.
function afficher_cacher(){ var elem=document.getElementById("id_element); if (elem.style.display=='none'){ elem.style.display='block'; } else elem.style.display='none'; } }
on se rend compte que sa ne fonctionne pas le style étant défini dans une feuille de style si on met une alert on obtient une chaîne vide. pour contourner ce problème on ajoute un ou logique dans la condition qui teste si la chaîne est vide.
function afficher_cacher(){ var elem=document.getElementById("id_element); if (elem.style.display=='none' || elem.style.display==''){ elem.style.display='block'; } else elem.style.display='none'; } }
getComputedStyle est utilisable uniquement en lecture elle est similaire a style avec une différence. Que le css soit déclaré dans le corps de la page, dans l’entête du document ou dans une feuille de style permet de connaître le style d'un élément.
il existe deux variantes soit on utilise la même syntaxe qu'avec la méthode style.
var elem=document.getElementById("id_element); function info_style() { var stl=window.getComputedStyle(elem, null).marginLeft; } alert(stl)
soit on utilise getPropertyValue et la on se retrouve avec la syntaxe css
var elem=document.getElementById("id_element); function info_style() { var stl=window.getComputedStyle(elem, null).getPropertyValue(margin-left); } alert(stl)
l'assignation de class se réfère a une feuille de style ou une déclaration de style dans l'entête du document définissant le style de l'ensemble des élément d'une page afin de séparer les élément de la page de la définition de leurs rendu pour une meilleur lisibilité et maintenance.
avec className on spécifie le nom de la ou des class.
mon_element.className='style_a style_b';
la méthode remplace la les class précédente
tout comme className il suffit de spécifié le nom de la ou des class.
mon_element.setAttrubute('class','style_a style_b');
la méthode remplace la les class de l'element.
avec classList on vas pouvoir assigné ou supprimer une class a la fois.
utilisé seul classList fournit une nodeliste qui permet de connaître le nombre de class d'un élément avec la propriété length length ainsi que le nom de chaque class du même élément en fournissant un tableau que l'on parcoure avec une boucle.
<!DOCTYPE html> <html lang="fr"> <head> <script> function liste_class(){ var liste=document.querySelector('p').classList alert(liste.length) for(var i=0; i < liste.length; i++){ alert(liste[i]); } } </script> </head> <body> <p class='class1 class2 class3 class4'>Bonjour</p> <button onclick='liste_class()'>teste</button> </body> </html>
ajouter une class add().
mon_element.classList.add('style_a');
mon_element.classList.add('style_b');
supprimer une class remove().
document.getElementById('un_element').classList.remove('nom_de_la_classe')
remplacer une class par une autre replace().
document.getElementById('un_element').classList.replace("nom_ancienne_class", "nom_nouvelle_class")
connaitre l'existance d'une class contains()
permet de savoir si une class est presente sur un element en renvoyant true ou false
document.getElementById('un_element').classList.contains("nom_de_la_classe");
connaitre l'ensemble des class d'un element <bold>toString()<bold>
retourne la chaîne de texte complète contenu dans la balise de la meme manière que le fait className et getAttribute
document.getElementById('un_element').classList.toString("nom_de_la_classe");
interchanger une class toggle()
permet de supprimer une classe si celle ci est attribué a l'element dans le cas contraire elle ajoute cette class
document.getElementById('un_element').classList.toggle("nom_de_la_classe");
on utilise l'attribut style afin de definir le style
elem.setAttribute('style','background-color:blue;font-size:25px;margin:auto;border:2px dashed green;color:white;')
;
la méthode cssText consiste a placer le style css de la meme facon qu'une feuille de style sur une ligne.
mon_element.style.cssTexte="background-color:blue;font-size:25px;margin:auto;border:2px dashed green;color:white;"
creatTextNode tout comme createElement est une méthode de l'objet document il est donc toujours précédé de celui ci et pour l'insérer dans un élément en cour de création on utilise appendChild et si il s'agit d'une insertion dans le document on utilisera les méthode d'insertion du dom qui seront vu au prochain chapitre.
var elem=document.createElement('span'); var txt=document.creatTextNode('du texte.') elem.appendChild(txt);
s'agissant de la creation d'un noeux de texte si l'element possede déja du texte creatTextNode ajoute du texte a la suite du texte.
textContent permet d'inserer un texte si il n'y en a pas ou de remplacer un texte si l'element comporte du texte.
var elem=document.createElement('span'); elem.textContent='du texte.';
on peut aussi recupere le texte de l'element
var elem=document.createElement('span'); alert(elem.textContent)
il est aussi possible d'inserer du texte avec innerHTML
var elem=document.createElement('span'); elem.innerHTML="du texte.";
attention tout de meme avec cette méthode qui remplacera tous les élément contenu dans l'élément référent par le texte
on peut aussi recupere le texte et le html de l'element.
var elem=document.createElement('span'); alert(elem.innerHTML);
plusieur méthodes son utilisé
appele l'element par son id avec cette methode la balise doit avoir un id
document.getElementById("id_element);
Appeler le premier element trouvé correspondant au selecteur css mis en parametre. Cette méthode impose de connaitre les selecteurs css qui donne un tres tres large panel de possibilité dans la selection d'element.
document.querySelector('#element span')
a noter que
document.querySelector('#element')
est équivalent a
document.getElementById("element")
ou bien encore
document.querySelector('.element')
qui est équivalent a
document.getElementsByClassName("element")[0]
une nodeliste est un peut comme un tableau javascript dans lequel chaques index possede un lien vers les elements correspondant a la recherche il possede l'attribut length et on utilise une boucle pour le parcourir. Il existe quatre methode.
getElementsByTagName
nodeliste d'éléments correspont a la balise donné en paramètre.
var all_elem=element_referent.getElementsByTagName('div');
on peut aussi selectionner toutes les balise en utilisant l'asterix
var all_elem=element_referent.getElementsByTagName('*');
getElementsByclassName
nodeliste d'éléments ayant en commun la meme class.
var all_elem=element_referent.getElementsByclassName('une_class');
getElementsByName
nodeliste d'éléments ayant en commun le meme nom.
var all_elem=element_referent.getElementsByName('nom_element');
querySelectorAll
nodeliste d'éléments ayant en commun le meme selecteur css.
var all_elem=element_referent.querySelectorAll('#element span');
childNodes
nodeliste de tous les éléments enfant contenu dans l'élément référent. Les enfants des enfants ne sont pas pris en compte
var all_elem=element_referent.childNodes;
pour les exemples qui suivent on utilisera la méthode getElementsByTagName mais c'est le meme principe pour les autres méthodes
si on desire recupere toutes les balise h1 d'une page afin de modifier la couleur de texte on utilisera document associé a getElementsByTagName pour recuperer la nodelist puis pour modifier la couleur on parcourera la liste
var all_elems = document.getElementsByTagName("h1"); for(var i=0; i < all_elems.length; i++){ all_elems[i].style.color=red; }
si par contre on désire selectionner uniquement les balise input d'un formulaire de type text ayant comme id 'id_du_formulaire' afin par exemple de tester si il on ete remplis on se place dabord dans le formulaire en utilisant pour l'exemple getElementById puis on cree la nodelist avec getElementsByTagName.
var all_elements=document.getElementById('id_du_formulaire').getElementsByTagName("input);
voici un exemple complet pour lequel on recherche dans un formulaire si un input est vide et si on en trouve un on affiche une alerte avertissant que le chanp est vide puis on position le curseur de la souris dans le input vide et enfin on stop la boucle.
var all_elems=document.getElementById('id_formulaire').getElementsByTagName("input"); for(var i=0; i < all_elems.length; i++){ if(all_elems[i].value==''){ alert('tous les champs ne sont pas rempli'); all_elems[i].focus(); break; } }
selectionne le premier élément enfant du parent les nodes de texte sont compris.
selectionne le premier élément enfant du parent contrairement a firstChild les nodes de texte ne sont pas compris.
selectionne le dernier élément enfant du parent les nodes de texte sont compris.
selectionne le dernier élément enfant du parent contrairement a lastChild les nodes de texte ne sont pas compris.
sélectionne l' élément enfant du parent se trouvant a la position mis en paramètre
selectionne l'element voisin precedent de l'element referent.
selectionne l'element voisin precedent de l'element referent contrairement a previousSibling les nodes de texte ne sont pas compris.
selectionne l'element voisin suivant de l'element referent.
selectionne l'element voisin suivant de l'element referent contrairement a nextSibling les nodes de texte ne sont pas compris.
permet de placer un élément nouvellement créé dans l'élément cible ou de déplacer un élément dans l'élément cible, si l'élément comporte en son sein plusieurs elementsil sera placé a la fin.
parent.appendChild(enf)
avant
<body> <div id='leconteneur'> <img src='une_image.jpg'> </div> </body>
code
var contenu=document.createElement('div'); contenu.setAttribute('id','le_contenu'); document.getElementById("leconteneur").appendChild(contenu);
apres
<body> <div id='leconteneur'> <img src='une_image.jpg'> <div id='lecontenu'></div> </div> </body>
avant
<body> <div id='element_a_deplacer'> </div> <div id='element_receveur'> <img src='une_image.jpg'> </div> </body>
code
var elem = document.getElementById("element_a_deplacer"); document.getElementById("element_receveur").appendChild(elem);
après
<body> <div id='element_receveur'> <img src='une_image.jpg'> <div id='element_a_deplacer'> </div> </div> </body>
permet de placer un élément nouvellement créé avant l'élément spécifié ou de déplacer un élément avant l'élément spécifié.
parent.insertBefore(nouveau, referent)
avant
<body> <div id='prt'> <div id='div_1'></div> <div id='div_2'></div> <div id='div_3'></div> </div> </body>
code
var new_element=document.createElement('div'); new_element.setAttribute('id','le_nouveau_div'); var div_ref=document.getElementById("div_2"); document.getElementById("prt").insertBefore(new_element, div_ref);
après
<body> <div id='prt'> <div id='div_1'></div> <div id='le_nouveau_div'></div> <div id='div_2'></div> <div id='div_3'></div> </div> </body>
remplace un element par un autre
parent.replaceChild(nvEnf, enf)
avant
<body> <div id='div_a_remplacer'></div> </body>
var new_element=document.createElement('div'); new_element.setAttribute('id','le_nouveau_div'); var a_remplacer=document.getElementById("div_a_remplacer") document.body.replaceChild(new_element, a_remplacer)
apres
<body> <div id='le_nouveau_div'> </div> </body>
supprime un element de la page pour supprimer l'element il faut se positionner dans le parent. La syntaxe frequement utilisé se referre a l'element puis on appel son parent (elem.parentNode)et enfin on suprime ce meme element.
parent.removeChild(enf)
avant
<body> <div id='element_a_supprimer'></div> </body>
code
var elem = document.getElementById("element_a_supprimer"); elem.parentNode.removeChild(elem)
apres
<body> </body>
supprime un element de la page en precisant l'element a supprimer cette méthode simplifie la suppression d'un élémant comparé a removeChild la méthode étant recente attention a la compatibilité avec de plus ou moins vieux navigateurs.
avant
<body> <div id='element_a_supprimer'></div> </body>
code
var elem = document.getElementById("element_a_supprimer"); elem.remove()
apres
<body> </body>
stock dans une variable la copie d'un element la copie peut ensuite etre modifié et replacé dans le document.
si l'element cloné contient un id on prendra soins de modifier l'id du clone afin de ne pas avoir deux fois le meme id dans la page.
element.cloneNode
avant
<body> <div id='element_a_cloner' class='cl1'></div> </body>
var elem = document.getElementById("element_a_cloner"); var le_clone = elem.cloneNode(true); le_clone.setAttribute('id','nouvelle_id'); document.body.appendChild(le_clone);
apres
<body> <div id='element_a_cloner' class='cl1'></div> <div id='nouvelle_id'class='cl1' ></div> </body>
afin de connaitre les dimensions reel d'un element on peut utiliser style mais si l'element a des bordures on devra aussi recuperer la valeur des bordure et les additions a la taille de l'element? de plus on devra convertir les valeur en chiffre car style recupere la valeur de css déclaré qui est une chaine de carractere qui contient l'unité de mesure(px,em,%...etc).
pour connaitre les hauteurs et largeurs reels nous allons plutot utilisé offsetHeight et offsetWidth qui prennent en compte la tailles des bordures et fournisses une valeur numérique.
dans l' exemple qui suit on récuper les dimensions d'un carré de 100px ayant une bordure de 10px
<!DOCTYPE html> <html><head> <script> function ces(el){ var elem = document.getElementById(el); alert('offsetHeight : '+elem.offsetHeight) alert('offsetWidth : '+elem.offsetWidth) } </script> </head><body> <button onclick='ces("d1")'>teste</button> <div id='d1' style='background:red;left:50px;margin:auto;height:100px;width:100px;border-style:solid;border-width:10px'></div> </body></html>
donne la hauteur intérieure d'un élément. comprenant les marges intérieures (padding),contrairement a offsetHeight et offsetWidth les bordure ne sont pas pris en compte.
<!DOCTYPE html> <html><head> <script> function ces(el){ var elem = document.getElementById(el); alert('clientHeight : '+elem.clientHeight) alert('clientWidth : '+elem.clientWidth) } </script> </head><body> <button onclick='ces("d1")'>teste</button> <div id='d1' style='background:red;left:50px;margin:auto;height:100px;width:100px;border-style:solid;border-width:10px'></div> </body></html>
Ces propriétés donnes les coordonnées d'un element relatives au parent référent (offsetParent).
l'offsetParent est representé par l'element referent le parent pour le calcule de la position des elements (les enfants) se trouvant a l'interieur du parent.
Dans un page l'offset parent est pour tous les element par defaut le bord haut gauche de la fenetre, pour definir un element en tant qu'offsetParent il suffit de mettre l'element en position relative grace a l'attribut css position (position:relative;) qui aurra pour consequence que tous les elements enfant auront leur position de depart nom plus en haut a gauche de la fenetre mais en haut a gauche du parent.
pour bien comprendre on prend comme exemple un div avec une marge de 50 pixel que l'on appelera div_1 et a l'interieur de ce div se trouve un autre div qui se nome div_2 avec une marge de 20 pixel. la position css de ces deux div est la position par défault (statique) et si je fait.
alert(document.getElementById(div_2).offsetLeft)
j'obtient 70 (50+20) qui et la position de div_2 par rapport au corp de la page (body) qui est le referent et que l'on appel offsetParent.
maintenant si je met div_1 en position relative et que je refait.
alert(document.getElementById(div_2).offsetLeft)
j'obtient 20 car comme div_1 est en position relative il est devenu l'offsetParent et en conséquence tous les element se trouvant a l'interieur prennent comme point de depart div_1.
il est possible de connaitre la position par rapport a la page d'un element ayant un ou plusieur offsetParent en utilisant une boucle qui controlera si l'element a un offset parent et on additionnera la position de chaque element.
function position_page(el){ var elem = document.getElementById(el); var coords_left=0 var coords_top=0 while (elem){ coords_left+= elem.offsetLeft; coords_top+= elem.offsetTop; elem = elem.offsetParent; } alert(coords_left) }
Cette méthode permet de connaitre la position toujours par rapport au bord haut gauche de la fenetre ainsi que la taille reel d'un élément dans la page elle possede les attributs left top height width.
les information height et width sont similaires a offsetHeight et offsetWidth quand a left et right dans tous les cas de figure l'information se basent par rapport au bord haut gauche de la fenêtre du navigateur et pas a l'offset parent l'utilisation de cette méthode est plus lente que les méthodes précédentes.
var elem = document.getElementById("un_element"); var posi_taille = elem.getBoundingClientRect() alert(posi_taille.height) alert(posi_taille.width) alert(posi_taille.left) alert(posi_taille.right)
dans un fomulaire l'utilisateur entre et valide des donnés et il est interessant de pouvoir recuperer ces donnés
value corespond au contenu des balises textarea et input. il correspond aussi a la valeur selectionné d'une balise select.
recuperation de valeur
var un_input= = document.getElementById("id_input"); alert(un_input.value); var un_textarea= = document.getElementById("id_textarea"); alert(un_textarea.value); var un_select= = document.getElementById("id_select"); alert(un_select.value);
value permet aussi de definir le contenu des balises textarea et input.
var un_input= = document.getElementById("id_input"); un_input.value="du texte"; var un_textarea= = document.getElementById("id_textarea"); un_textarea.value="du texte";
checked est utilisé avec les balises radio et checkbox et permet de savoir si ces balise on eté selectionné, coché.
les valeur retourné son true si l'element est coché ou false si l'element n'est pas coché.
var un_bouton_radio= = document.getElementById("id_bouton_radio"); alert(un_bouton_radio.checked); var un_checkbox = document.getElementById("id_checkbox"); alert(un_checkbox.checked);
checked permet aussi de valider la selection ou deselection des balises radio et checked.
var un_bouton_radio= = document.getElementById("id_bouton_radio"); un_bouton_radio.checked; var un_checkbox = document.getElementById("id_checkbox"); un_checkbox.checked;
rend un element innactif dans le cas d'un bouton il ne sera pas possible de cliquer dessus pour un textarea on ne poura pas ecrire dedans de meme pour un input....etc les valeur possible sont true pour rendre l'element inactif ou false pour le rendre actif.
var un_bouton_radio= = document.getElementById("id_bouton_radio"); un_bouton_radio.disabled=true; var un_checkbox = document.getElementById("id_checkbox"); un_checkbox.disabled=true;
pour savoir si l'element est actif ou inactif on teste disabled qui renvoi true ou false.
var un_bouton_radio= = document.getElementById("id_bouton_radio"); console.log(un_bouton_radio.disabled); var un_checkbox = document.getElementById("id_checkbox"); console.log(un_checkbox.disabled);
focus permet de positionner le curseur de la souris su l'element selectionné il s'agira d'elements permettant de faire une saisie avec le clavier (textarea, input de type password ou text...etc) l'interet est de pouvoir effectuer la saisir dans l'element sans avoir a cliquer dessus.
var un_textarea = document.getElementById("id_textarea"); un_textarea.focus();
a l'inverse de focus Supprime le focus clavier de l' élément.
var un_textarea = document.getElementById("id_textarea"); un_textarea.blur();
Sélectionne le contenu d'une zone de texte. comme un textarea ou des input de type text password...etc,
var un_textarea = document.getElementById("id_textarea"); un_textarea.select();
declenche un clique de souris. Pour les éléments input de type Button, Checkbox, Radio, Reset et Submit.
var un_bouton = document.getElementById("id_bouton"); un_textarea.select();
avant transmission il est frequent de controler les donné d'un formulaire par l'intermédiaire d'un fonction pour ce faire on creer un bouton qui lancera la fonction chargé de controler la validité des donné du formulaire et en fin de fonction lors que tout est conforme le formulaire pourra etre transmit avec submit().
var un_formulaire = document.getElementById("id_formulaire"); var un_textarea= document.getElementById("id_textarea"); if(un_textarea.value=""){ un_textarea.focus(); } else{ un_formulaire.submit(); }
la barre de scroll permet de faire defiler le contenu d'un conteneur. Par defaut la fenetre du navigateur contient une barre de scroll qui s'affiche quand le contenu est superieur a la taille de la page mais ce n'est pas le cas pour les elements d'une page. Il est possible de donner a un element conteneur ayant aubligatoirement l'attribut css display a block comme une balise div la possibilité d'etre scrollable pour ce faire il suffit de preciser l'attribut css overflow a hidden, scroll ou auto afin de cacher le contenu lors ce que celui ci est supperieur a la taille de l'element conteneur. Contrairement a scroll hidden n'affichera pas les barre de scroll quand a auto la barre sera affiché seulement si le contenu est superieur a la taille du conteneur comme pour la fenetre du navigateur. si l'on désire avoir uniquement la barre honrizontal ou verticale Il est possible de le préciser plus finement avec les attribut css overflow-x et overflow-y.
la gestion du scroll ce fait par l'intermediaire de l'evenement onscroll.
<div id="dv" style="height: 250px;width:200px;background:blue;margin:auto;overflow-y:scroll" onscroll="une_fonction()"> Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker. </div>
pour recuperer la valeur de scroll d'un element il suffit juste de préciser l'element.
pour recuperer la valeur de scroll de la fenetre du navigateur on notera une différence en fonction du mode de fonctionnement du navigateur mode standards ou quirks (compatible), la différence ce situe au niveau de l'element referent. l'element referent peut soit etre le document racine la balise html (document.documentElement) qui est la valeur standard soit le corp de la page la balise body (document.body). Pour etre certains que l'on ai le bon element referent il est preferable de faire un teste pour recuperer l'element referent en utilisant une condition.
if(document.body.scrollTop){ var element_scroll=document.body } else{ var element_scroll=document.documentElement }
on peut simplifier de cette facon
var element_scroll=document.body.scrollTop ? document.body : document.documentElement
permet de specifier une position a la barre de scroll.
l'utilisation se fait en precisant l'element puis on indique les valeur de scroll en parametre le premiere parametre correspondant au scroll honrizontal et le second au scroll verticale.
document.getElementById('dv').scroll(0, 100);
tout comme scroll permet de specifier une position a la barre de scroll mais permet en plus de donne la position de la barre de scroll en hauteur (scrollTop) ou en largeur scrollLeft.
document.getElementById("un_div").scrollTop=50 alert(document.getElementById("un_div").scrollTop)
==scrollHeight scrollWidth===
donne la taille totale en hauteur (scrollHeight) ou en largeur (scrollWidth) du scroll.
alert(document.getElementById("un_div").scrollHeight) alert(document.getElementById("un_div").scrollWidth)
permet de positionner la barre de scroll en fonction d'un element donné en parametre.
L'element devant etre visible sera positioné par defaut en haut du conteneur on peut forcer la position en bas en specifiant en parametre la valeur false.
document.getElementById("un_element").scrollIntoView(); document.getElementById("un_element").scrollIntoView(false);
l'objet location contient des méthodes permettant de recharger la page en court ou bien de charger une nouvelle page par l'intermediaire de script.
href permet de connaitre l'adresse de la page et permet le chargement d'une nouvelle page.
alert(location.href) //donne l'adresse de la page courante location.href="https://une_nouvelle_page.com";
href permet aussi de positionner une page par rapport a une encre definit dans une balise A de la page par l' id poue ce faire on specifie l'id de l'ancre precedé par diése (hashtag).
<h2><a id="nom_de_l_encre">une position dans la page</a></h2>
location.href="#nom_de_l_encre";
assign() permet uniquement le chargement d'une nouvelle page.
location.assign("https://une_nouvelle_page.com");
replace() permet uniquement le chargement d'une nouvelle page avec une difference par rapport a assign() et href qui est la supression dans l'historique des page du navigateur de la page remplacé donc en utilisant le bouton retour du navigateur la page remplacé n'apparaitra pas.
location.replace("https://une_nouvelle_page.com");
recharge la page courante
location.reload();
pour ajouter des lignes ou colonnes dans un tableau on peut soit utiliser la méthode createElement ou utiliser la methode décrite ci dessous qui a l'avantage de créer des ligne ou colonne et de se positionner dans un tableau avec une syntaxe plus simple et plus courte.
pour se positionner enttre deux lignes on utilise rows[index] et cols[index] pour les colones de la meme ligne en precisant l'index qui commence a zero.
si je veut me positionner sur la troisieme ligne dans la quatrieme colonne.
var table=document.getElementById("id_table") table.rows[2].cels[3]
pour ce faire on utilise lenght
pour le nombre de lignes du tableau on fait
var table=document.getElementById("id_table) alert(table.rows.length);
pour le nombre de cellules d'une ligne on fait
var table=document.getElementById("id_table) alert(table.rows[2].cells.length);
pour le nombre de cellules du tableau en entié
var table=document.getElementById("id_table") alert(table.cells.length);
pour inserer une ligne on utilise insertRow() en precisant l'endroit (index) du tableau ou doit etre placé la colonne.
placer une ligne en début de tableau index 0
var table=document.getElementById("id_table) table.insertRow(0);
placer une ligne apres la 3 eme ligne du tableau index 2
var table=document.getElementById("id_table) table.insertRow(2);
placer une ligne en fin de tableau index -1 ou pas d'index
var table=document.getElementById("id_table) table.insertRow(-1);
pour supprimer une ligne on utilise deleteRow(), le principe est le meme que pour inserer une ligne
supprimer la premiere ligne du tableau index 0
var table=document.getElementById("id_table) table.deleteRow(0);
supprimer la 3 eme ligne du tableau index 2
var table=document.getElementById("id_table) table.deleteRow(2);
supprimer la derniere ligne du tableau index -1
var table=document.getElementById("id_table) table.deleteRow(-1);
c'est le meme principe que pour les lignes mais avec insertCell() et au lieux de designer le tableau on designe la ligne.
placer une cellule sur la ligne 3 a la fin, pas d'index ou index -1
var table=document.getElementById("id_table) table.rows[2].insertCell();
placer une cellule sur la ligne 3 en debut index 0
var table=document.getElementById("id_table) table.rows[2].insertCell(0);
pour supprimer une ligne on utilise deleteCell()
supprimer la premiere colone de la premiere ligne du tableau index 0
var table=document.getElementById("id_table) table.row[0].deleteCell(0);
supprimer la 3 eme colone de la premiere ligne du tableau index 2
var table=document.getElementById("id_table) table.row[0].deleteRow(2);
supprimer la derniere colone de la premiere ligne du tableau index -1
var table=document.getElementById("id_table) table.row[0].deleteCell(-1);