programmation web - iut-fbleau.fr©cificationontvulejour: #...

69
Programmation WEB DOM et api javascript Denis Monnerat [email protected] Updated: 2017/04/29 IUT de Fontainebleau

Upload: duongtuyen

Post on 09-Jul-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Programmation WEBDOM et api javascript

Denis [email protected]

Updated: 2017/04/29

IUT de Fontainebleau

Page 2: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Sommaire

1. Le DOM : introduction

2. Structure du DOM

3. Manipulation du DOM

4. DOM HTML

5. DOM 2 Events

Page 3: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Pourquoi ?

Chaque navigateur implantait ses propres méthodes de manipulation ducontenu html. D’où la nécessité :

# Uniformiser et abstraire (indépendance de tout langage) lareprésentation d’un document html (et xml)

# Spécifier une api de manipulation de cette représentation.

Le Dom Document Object Model

# une représentation objet normalisée des documents html et xml,sous forme arborescente.

# une api qui permet d’accéder au document et de manipuler soncontenu, sa structure et ses styles.

# permet ainsi d’interfacer un document avec un langage, commejavascript, mais aussi python, php, java, etc....

Page 4: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Plusieurs niveaux de spécification ont vu le jour :

# DOM 1 (1998) : manipulation d’un document html ou xml.

# DOM 2 (2001) : dernière version finalisée : ajout de méthodes deparcours de l’arbre, gestion des evénements et des feuilles de styles,vues filtrées.

# DOM 3 : en cours de spécification. interface de chargement et desauvegarde de documents xml, événement clavier, XPath...

Tous les navigateurs supportent le DOM 2.

Quelques références

# https://developer.mozilla.org/fr/docs/DOM

# http://www.w3.org/DOM

Page 5: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Structure du DOM

Structure arborescente de noeuds (node).

# Chaque noeud est un objet, avec des méthodes et des attributs.

# Cette interface est implanté pour plusieurs langages, commejavascript, php, java, python, perl, activeX.

# Les noms des interfaces, classes, méthodes et propriétés sontindépendantes du langages.

# Interface DOM pour d’autres documents (xml) du WEB : MathML,SVG, X3D, etc.

Page 6: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Un exemple

Représentation hiérarchique sous forme d’arbre.

<div id="exemple"><p>un paragraphe</p><ul>

<li>un element de liste</li></ul>

</div>

Document

Elément div

Elément p

Elementtexte

Element ul

Elément li

Elementtexte

Page 7: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Un exemple

Représentation hiérarchique sous forme d’arbre.

<div id="exemple"><p>un paragraphe</p><ul>

<li>un element de liste</li></ul>

</div>

Document

Elément div

Elément p

Elementtexte

Element ul

Elément li

Elementtexte

Page 8: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Un exemple

Représentation hiérarchique sous forme d’arbre.

<div id="exemple"><p>un paragraphe</p><ul>

<li>un element de liste</li></ul>

</div>

Document

Elément div

Elément p

Elementtexte

Element ul

Elément li

Elementtexte

Page 9: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Un exemple

Représentation hiérarchique sous forme d’arbre.

<div id="exemple"><p>un paragraphe</p><ul>

<li>un element de liste</li></ul>

</div>

Document

Elément div

Elément p

Elementtexte

Element ul

Elément li

Elementtexte

Page 10: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Un exemple

Représentation hiérarchique sous forme d’arbre.

<div id="exemple"><p>un paragraphe</p><ul>

<li>un element de liste</li></ul>

</div>

Document

Elément div

Elément p

Elementtexte

Element ul

Elément li

Elementtexte

Page 11: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Un exemple

Représentation hiérarchique sous forme d’arbre.

<div id="exemple"><p>un paragraphe</p><ul>

<li>un element de liste</li></ul>

</div>

Document

Elément div

Elément p

Elementtexte

Element ul

Elément li

Elementtexte

Page 12: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Un exemple

Représentation hiérarchique sous forme d’arbre.

<div id="exemple"><p>un paragraphe</p><ul>

<li>un element de liste</li></ul>

</div>

Document

Elément div

Elément p

Elementtexte

Element ul

Elément li

Elementtexte

Page 13: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Classe Node (dom3)

interface Node {

// NodeTypeconst unsigned short ELEMENT_NODE = 1;const unsigned short ATTRIBUTE_NODE = 2;const unsigned short TEXT_NODE = 3;const unsigned short CDATA_SECTION_NODE = 4;const unsigned short ENTITY_REFERENCE_NODE = 5;const unsigned short ENTITY_NODE = 6;const unsigned short PROCESSING_INSTRUCTION_NODE = 7;const unsigned short COMMENT_NODE = 8;const unsigned short DOCUMENT_NODE = 9;const unsigned short DOCUMENT_TYPE_NODE = 10;const unsigned short DOCUMENT_FRAGMENT_NODE = 11;const unsigned short NOTATION_NODE = 12;

readonly attribute DOMString nodeName;attribute DOMString nodeValue;

// raises(DOMException) on setting// raises(DOMException) on retrieval

Page 14: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

readonly attribute unsigned short nodeType;readonly attribute Node parentNode;readonly attribute NodeList childNodes;readonly attribute Node firstChild;readonly attribute Node lastChild;readonly attribute Node previousSibling;readonly attribute Node nextSibling;readonly attribute NamedNodeMap attributes;// Modified in DOM Level 2:readonly attribute Document ownerDocument;// Modified in DOM Level 3:Node insertBefore(in Node newChild,

in Node refChild)raises(DOMException);

// Modified in DOM Level 3:Node replaceChild(in Node newChild,

in Node oldChild)raises(DOMException);

// Modified in DOM Level 3:Node removeChild(in Node oldChild)

raises(DOMException);// Modified in DOM Level 3:Node appendChild(in Node newChild)

raises(DOMException);boolean hasChildNodes();

Page 15: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Node cloneNode(in boolean deep);// Modified in DOM Level 3:void normalize();// Introduced in DOM Level 2:boolean isSupported(in DOMString feature,

in DOMString version);// Introduced in DOM Level 2:readonly attribute DOMString namespaceURI;// Introduced in DOM Level 2:

attribute DOMString prefix;// raises(DOMException) on setting

// Introduced in DOM Level 2:readonly attribute DOMString localName;// Introduced in DOM Level 2:boolean hasAttributes();// Introduced in DOM Level 3:readonly attribute DOMString baseURI;

// DocumentPositionconst unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01;const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02;const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x04;const unsigned short DOCUMENT_POSITION_CONTAINS = 0x08;const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 0x10;const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;

// Introduced in DOM Level 3:unsigned short compareDocumentPosition(in Node other)

Page 16: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

unsigned short compareDocumentPosition(in Node other)raises(DOMException);

// Introduced in DOM Level 3:attribute DOMString textContent;

// raises(DOMException) on setting// raises(DOMException) on retrieval

// Introduced in DOM Level 3:boolean isSameNode(in Node other);// Introduced in DOM Level 3:DOMString lookupPrefix(in DOMString namespaceURI);// Introduced in DOM Level 3:boolean isDefaultNamespace(in DOMString namespaceURI);// Introduced in DOM Level 3:DOMString lookupNamespaceURI(in DOMString prefix);// Introduced in DOM Level 3:boolean isEqualNode(in Node arg);// Introduced in DOM Level 3:DOMObject getFeature(in DOMString feature,

in DOMString version);// Introduced in DOM Level 3:DOMUserData setUserData(in DOMString key,

in DOMUserData data,in UserDataHandler handler);

// Introduced in DOM Level 3:DOMUserData getUserData(in DOMString key);

};

Page 17: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

# D’autres classes dérivent, en la spécialisant, de node.

# Certains noeuds peuvent avoir des fils, d’autres représentent desfeuilles.

Page 18: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

DOM Core

Les noeuds, et leurs enfantsDocument Element (un, au maximum), ProcessingInstruction, Com-

ment, DocumentType(un, au maximum)DocumentFragment Element, ProcessingInstruction, Comment, Text, CDA-

TASection, EntityReferenceDocumentType aucun enfantEntityReference Element, ProcessingInstruction, Comment, Text, CDA-

TASection, EntityReferenceElement Element, Text, Comment, ProcessingInstruction, CDA-

TASection, EntityReferenceAttr Text, EntityReferenceProcessingInstruction aucun enfantComment aucun enfantText aucun enfantCDATASection aucun enfantEntity Element, ProcessingInstruction, Comment, Text, CDA-

TASection, EntityReferenceNotation aucun enfant

Page 19: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

DOM Core

; Pour chaque classe, il existe des méthodes et propriétés pour accéderaux données et les modifier.

; DOM HTML spécialise Le DOM CORE.

Page 20: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Plusieurs niveaux de spécifications

DOM2

# DOM2 Core : types, objets et interfaces de manipulation de document.http://www.w3.org/TR/DOM-Level-2-Core/core.html

# DOM2 HTML : extension du DOM2 Core pour HTML.http://www.w3.org/TR/DOM-Level-2-HTML/

# DOM2 Events : Gestion événementielle.http://www.w3.org/TR/DOM-Level-2-Events/

# DOM2 Traversal and Range : Parcours de noeuds et selection de tranchehttp://www.w3.org/TR/DOM-Level-2-Traversal-Range/

# DOM2 Style : Gestion des feuilles de style.http://www.w3.org/TR/DOM-Level-2-Style/

# DOM2 Views : Vues d’un document.http://www.w3.org/TR/DOM-Level-2-Views/

La plupart des spécifications est bien supportée par les navigateurs.

Page 21: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Plusieurs niveaux de spécifications

DOM3

# DOM3 Core : Extension du DOM3 Core.http://www.w3.org/TR/DOM-Level-3-Core/

# DOM3 Load and Save : sauvegarde et chargement XML.http://www.w3.org/TR/DOM-Level-3-LS/

# DOM3 Events : Extension de DOM2 Events (prise en charge des keyboard events.http://www.w3.org/TR/DOM-Level-3-Events/

# DOM3 XPATH : Support de XPATH 1.0.http://www.w3.org/TR/DOM-Level-3-XPath/

Le support par les navigateurs est très partiel.

Page 22: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Accéder à un noeud

Directement

; avec un nom d’élément :

NodeList getElementsByTagName(in DOMString tagname);

avec l’interface correspondante à une liste de noeud :

interface NodeList {Node item(in unsigned long index);readonly attribute unsigned long length;

};

; avec un identifiant :

Element getElementById(in DOMString elementId);

Page 23: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Accéder à un noeud

Avec un selecteur css

# Selector Api du DOM : reprend le mécanisme de selections dejquery qui utilise des selecteurs css.

# Un selecteur css : une règle css (qui selectionne donc un ensemble denoeuds).

http://www.w3.org/TR/selectors-api/

var el = document.querySelector(".myclass");// renvoie le premier noeud correspondantvar special = document.querySelectorAll( "p.warning, p.note" );// renvoie tous les noeuds sous forme d'une NodeListvar cells = document.querySelectorAll("#score>tbody>tr>td:nth-of-type(2)");// si aucune correspondance, renvoie null// Les pseudo-classes css ne sont pas supportées

Page 24: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Accéder à un noeud

en parcourant l’arbre avec les propriétés de la classenode

readonly attribute Node parentNode;readonly attribute NodeList childNodes;readonly attribute Node firstChild;readonly attribute Node lastChild;readonly attribute Node previousSibling;readonly attribute Node nextSibling;readonly attribute NamedNodeMap attributes;

Firefox stocke l’ensemble des espaces du document html sous formede noeuds texte. il faut les prendre en compte lors des traitements.

Page 25: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Créer un noeud

Dans la classe document

; un noeud élément :

Element createElement(in DOMString tagName)raises(DOMException);

; un noeud texte :

Text createTextNode(in DOMString data);

; un noeud attribut :

Attr createAttribute(in DOMString name)raises(DOMException);

Page 26: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Créer un noeud

On peut également dupliquer un noeud avec la méthode cloneNode dela classe node :

var elem=document.getElementById("mon_div");var sous_arbre=elem.cloneNode(true);var div=elem.cloneNode(false);

Page 27: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Ajouter/Supprimer

Méthode de la classe node :

Node insertBefore(in Node newChild,in Node refChild)

raises(DOMException);

Node replaceChild(in Node newChild,in Node oldChild)

raises(DOMException);

Node removeChild(in Node oldChild)raises(DOMException);

Node appendChild(in Node newChild)raises(DOMException);

Page 28: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

1. Arbre initial

<div id="mon_div"><ul><li>toto</li></ul>

</div>

2. Execution du code

var zone=document.getElementById("mon_div");var p=document.createElement("p");var texte=document.createTextNode("blablabla ...");p.appendChild(texte);zone.appendChild(p);

3. Nouvel arbre

<div id="mon_div"><ul><li>toto</li></ul><p>blablablabla ...</p>

</div>

div

ul p

Page 29: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

1. Arbre initial

<div id="mon_div"><ul><li>toto</li></ul>

</div>

2. Execution du code

var zone=document.getElementById("mon_div");var p=document.createElement("p");var texte=document.createTextNode("blablabla ...");p.appendChild(texte);zone.appendChild(p);

3. Nouvel arbre

<div id="mon_div"><ul><li>toto</li></ul><p>blablablabla ...</p>

</div>

div

ul p

Page 30: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

1. Arbre initial

<div id="mon_div"><ul><li>toto</li></ul>

</div>

2. Execution du code

var zone=document.getElementById("mon_div");var p=document.createElement("p");var texte=document.createTextNode("blablabla ...");p.appendChild(texte);zone.appendChild(p);

3. Nouvel arbre

<div id="mon_div"><ul><li>toto</li></ul><p>blablablabla ...</p>

</div>

div

ul p

Page 31: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Attributs

Tout élément (node de type NODE_ELEMENT) peut contenir des attributs,c’est à dire une paire (clé,valeur) rajoutant des informations.

interface Element : Node {readonly attribute DOMString tagName;DOMString getAttribute(in DOMString name);void setAttribute(in DOMString name,

in DOMString value)raises(DOMException);

void removeAttribute(in DOMString name)raises(DOMException);

Attr getAttributeNode(in DOMString name);Attr setAttributeNode(in Attr newAttr)

raises(DOMException);Attr removeAttributeNode(in Attr oldAttr)

raises(DOMException);

On peut savoir si un noeud en posséde avec la requête :

boolean hasAttribute(in DOMString name);

Page 32: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Exemple

<!DOCTYPE html><html>

<head><LINK href="/bootstrap/css/bootstrap.css" rel="stylesheet" type="text/css">

</head><body>

<div class="container-fluid"><div class="page-header">

<h1>Manipulation du dom</h1></div><form class="form-inline">

<input class="btn" type=button value="ajouter" onclick="ajouter('ma_liste');"><input class="btn" type=button value="retirer"onclick="retirer('ma_liste');"><input type=text id="survol" value="survol">

</form><ol id="ma_liste"></ol>

</div></body>

</html>

Page 33: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Exemple : suite

function affiche(ev){

var li=ev.target;document.getElementById("survol").value=li.childNodes.item(0).nodeValue;

}function ajouter(id){

var li=document.createElement("li");var texte=document.getElementById("survol").value;var t=document.createTextNode(texte);li.appendChild(t);document.getElementById(id).appendChild(li);li.addEventListener("mouseover",affiche,false);

}function retirer(id){

var n=document.getElementById("survol").value;var ol=document.getElementById(id);ol.removeChild(ol.childNodes.item(n-1));

}

Page 34: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde
Page 35: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Sous-arbre

On peut manipuler des sous-arbres avec l’objet DocumentFragment.

var fragment=document.createDocumentFragment();

On utilise un fragment comme un noeud.

var zone=document.getElementById("ma_zone");var fragment=document.createDocumentFragment();var jours=["lundi","mardi","mercredi","jeudi","vendredi",

"samedi","dimanche"];for(i=0;i<jours.length;i++) {

var p=document.createElement("p");var texte=document.createTextNode(jours[i]);p.appendChild(texte);fragment.appendChild(p);

}zone.appendChild(fragment);

Page 36: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

zone.appendChild(fragment);

Très utile lorsque l’on aurait été obligé de modifier le dom après chaqueinsertion de noeud, comme c’est le cas dans l’exemple précédent.Permet de gagner en performance.Il est important de savoir comment une librairie qui abstrait le dom géresa modification.

Page 37: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

XML

Javascript permet :

# de créer des documents xml, vierges ou à partir d’un fichier xmllocal.

# de le parser avec l’api DOM.

# de le transformer avec xslt.

Page 38: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

le noeud document doit posséder selon DOM2 un attributimplementation de type DOMImplementation dont voici l’interface :

interface DOMImplementation {boolean hasFeature(in DOMString feature,

in DOMString version);// Introduced in DOM Level 2:DocumentType createDocumentType(in DOMString qualifiedName,

in DOMString publicId,in DOMString systemId)

raises(DOMException);// Introduced in DOM Level 2:Document createDocument(in DOMString namespaceURI,

in DOMString qualifiedName,in DocumentType doctype)

raises(DOMException);};

Page 39: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

xmlDoc=document.implementation.createDocument("","",null);xmlDoc.async=false;xmlDoc.load("cia.xml");var continent=xmlDoc.getElementsByTagName('continent');var liste=document.createElement("ul");for(i=0;i<continent.length;i++){

li=document.createElement("li");texte=document.createTextNode(

continent.item(i).getAttributeNode('name').nodeValue);

li.appendChild(texte);liste.appendChild(li);

}document.getElementById("continent").appendChild(liste);

Page 40: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Avec le fichier cia.xml

<?xml version="1.0" encoding="UTF-8"?><cia>

<continent id='europe'name='Europe'/>

<continent id='asia'name='Asia'/>

<continent id='northAmerica'name='North America'/>

<continent id='australia'name='Australia/Oceania'/>

<continent id='southAmerica'name='South America'/>

<continent id='africa'name='Africa'/>

...

Page 41: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Dom HTML

Le DOM HTML est une extension du DOM CORE.

Pourquoi ?

# Spécialiser et ajouter des attributs et fonctionnalités spécifiques auxdocuments et éléments HTML.

# Assurer la compatibilité avec le DOM 0.

# Ajouter des mécanismes, des traitements utiles, communs etpratiques dans le cas spécifique d’HTML.

Page 42: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

DOM HTML

# HTMLDocument dérive de Document du DOM CORE.

# HTMLElement dérive de Element du DOM CORE.

# Nouvelle Interface pour chaque type d’éléments html qui spécialiseHTMLElement.

Page 43: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

HTMLDocument

interface HTMLDocument : Document {attribute DOMString title;readonly attribute DOMString referrer;readonly attribute DOMString domain;readonly attribute DOMString URL;attribute HTMLElement body;readonly attribute HTMLCollection images;readonly attribute HTMLCollection applets;readonly attribute HTMLCollection links;readonly attribute HTMLCollection forms;readonly attribute HTMLCollection anchors;attribute DOMString cookie;// raises(DOMException) on setting

void open();void close();void write(in DOMString text);void writeln(in DOMString text);NodeList getElementsByName(in DOMString elementName);

};

Page 44: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

HTMLElement

interface HTMLElement : Element {// DOM tree accessorsNodeList getElementsByClassName(in DOMString classNames);

// dynamic markup insertionattribute DOMString innerHTML;

// metadata attributesattribute DOMString id;attribute DOMString title;attribute DOMString lang;attribute DOMString dir;attribute DOMString className;

La plupart des éléments html spécialisent cette classe. Voici deuxexemples

Page 45: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

HTMLFormElement

interface HTMLFormElement : HTMLElement {readonly attribute HTMLCollection elements;readonly attribute long length;attribute DOMString name;attribute DOMString acceptCharset;attribute DOMString action;attribute DOMString enctype;attribute DOMString method;attribute DOMString target;void submit();void reset();

};

Page 46: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

HTMLTableElement

interface HTMLTableElement : HTMLElement {// Modified in DOM Level 2:attribute HTMLTableCaptionElement caption;// raises(DOMException) on setting

// Modified in DOM Level 2:attribute HTMLTableSectionElement tHead;// raises(DOMException) on setting

// Modified in DOM Level 2:attribute HTMLTableSectionElement tFoot;// raises(DOMException) on setting

readonly attribute HTMLCollection rows;readonly attribute HTMLCollection tBodies;attribute DOMString align;attribute DOMString bgColor;attribute DOMString border;attribute DOMString cellPadding;attribute DOMString cellSpacing;attribute DOMString frame;attribute DOMString rules;attribute DOMString summary;attribute DOMString width;

};

Page 47: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

HTMLTableElement (suite)

interface HTMLTableElement : HTMLElement {

HTMLElement createTHead();void deleteTHead();HTMLElement createTFoot();void deleteTFoot();HTMLElement createCaption();void deleteCaption();// Modified in DOM Level 2:HTMLElement insertRow(in long index)

raises(DOMException);// Modified in DOM Level 2:void deleteRow(in long index)

raises(DOMException);};

Spécifications complèteshttp://www.w3.org/TR/DOM-Level-2-HTML/

Page 48: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Propriété innerHTML

La propriété innerHTML permet de récupérer ou fixer le contenu htmld’un élément, à partir d’une chaîne de caractères (représentant unfragment d’html)

document.getElementById("ma_div").innerHTML="<p>youpi !!!</p>";

Page 49: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

But ?

Des événements peuvent être associé à des balises html en utilisantcertains de leur attribut, dont le nom est préfixé par on (onload, onclick,etc...)

mélange (x)html et javascript�

DOM 2 fournit un support à la gestion des événements.

Page 50: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Support DOM des evts

# Modéle générique qui permet :◦ l’enregistrement de handlers d’evénements.◦ de décrire le mécanisme de propagation des evénements dans une

structure d’arbre.◦ de décrire une information contextuel pour chaque événement.

# Fournir un sous-ensemble commun pour ce qui est déjà utilisé dansDOM 0. (augmenter la portabilité)

# Pour savoir si une application le supporte, utiliserhasFeature(feature, version) de l’interfaceDOMImplementation avec hasFeature("Events","2.0")

# Consulter les pages

http://www.w3.org/TR/DOM-Level-3-Events/

Page 51: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Le flot

Page 52: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Le flot

# Basiquement, chaque événement posséde une cible (EventTarget)à qui il est délivré.

# Tous les handlers correspondant sont alors éxécutés (ordre ?).

Il existe deux modes de propagations :

Modes

Ascendant nommé bubbling, bas niveau vers haut niveau.(I.Eau début)

Descendant nommé capturing, haut niveau vers bas niveau.(Netscape au début)

Page 53: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Le flot

# capturingLors de la délivrance d’un événement à sa cible, l’événement peutêtre délivré à un noeud parent (en partant de la racine) si le noeud aenregistré une fonction reflexe en autorisant la capture avec leparamètre useCapture dans la fonction d’enregistrement(addEventListener).La propagation peut-être interrompu avec la méthodestopProgagation de la classe Event.

# bubblingCertains événements, après la phase de descente, sont alors délivrésaux parents de la cible (qui ont enregsitré une fonction reflexe), enremontant vers la racine. (ceux qui avaient capturé en sont exclus !)La propagation peut être interrompue avec la méthodestopProgagation de la classe Event.

Page 54: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

# Cancelation : L’implémentation Dom (l’application) possède untraitement par défaut pour certains événements (click et hyperlienpar exemple)Quand l’événement survient, les fonctions reflexes sont exécutées. Letraitement par défaut peut être alors inhibé par la méthodepreventDefault de la classe Event.

Page 55: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

# Gestion des gestionnaires d’événements.

// Introduced in DOM Level 2:interface EventTarget {

void addEventListener(in DOMString type,in EventListener listener,in boolean useCapture);

void removeEventListener(in DOMString type,in EventListener listener,in boolean useCapture);

boolean dispatchEvent(in Event evt)raises(EventException);

};

# Avec l’interface EventListener

// Introduced in DOM Level 2:interface EventListener {

void handleEvent(in Event evt);};

Page 56: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Et l’interface Event

// Introduced in DOM Level 2:interface Event {

// PhaseTypeconst unsigned short CAPTURING_PHASE = 1;const unsigned short AT_TARGET = 2;const unsigned short BUBBLING_PHASE = 3;

readonly attribute DOMString type;readonly attribute EventTarget target;readonly attribute EventTarget currentTarget;readonly attribute unsigned short eventPhase;readonly attribute boolean bubbles;readonly attribute boolean cancelable;readonly attribute DOMTimeStamp timeStamp;void stopPropagation();void preventDefault();void initEvent(in DOMString eventTypeArg,

in boolean canBubbleArg,in boolean cancelableArg);

};

Page 57: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

function ReponseClick(e){/* traitement*/}var n=document.getElementById("mon_noeud");n.addEventListener("click",ReponseClick,false);/* pas de capture */

n.removeEventListener("click",ReponseClick,false);};

Page 58: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

DocumentEvent Interface

// Introduced in DOM Level 2:interface DocumentEvent {

Event createEvent(in DOMString eventType)raises(DOMException);

};

Cette interface permet de simuler des évéments (click, etc...) parprogrammation.

Page 59: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Types d’evts

Il existe plusieurs catégories logiques d’événements :

Catégorie, type et description

Evénement Event Evenement génériqueInterfaceUtilisateur

UIEvent DOMActivate,DOMFocusIn,DOMFocusOut et événementsclaviers

Evt souris MouseEvent click, mousedown, mouseup, mou-seover, mouseout

Evt élémenthtml

HTMLEvent abort, blur, change, focus, error,load, unload, reset, scroll, select,submit, ...

Evt demutation

MutationEvent modification du DOM

Le modèle DOM offre la possibilité d’ajouter des catégories

Page 60: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

User Interface events

User Interface event module est composé des événements listés dansHTML 4 et dans DOM 0.

// Introduced in DOM Level 2:interface UIEvent : Event {

readonly attribute views::AbstractView view;readonly attribute long detail;void initUIEvent(in DOMString typeArg,

in boolean canBubbleArg,in boolean cancelableArg,in views::AbstractView viewArg,in long detailArg);

};

Ce type est dérivé lui-même en ...

Page 61: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

MouseEvent

// Introduced in DOM Level 2:interface MouseEvent : UIEvent {

readonly attribute long screenX;readonly attribute long screenY;readonly attribute long clientX;readonly attribute long clientY;readonly attribute boolean ctrlKey;readonly attribute boolean shiftKey;readonly attribute boolean altKey;readonly attribute boolean metaKey;readonly attribute unsigned short button;readonly attribute EventTarget relatedTarget;

};

Page 62: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

MouseEvent

(interface suite)void initMouseEvent(in DOMString typeArg,

in boolean canBubbleArg,in boolean cancelableArg,in views::AbstractView viewArg,in long detailArg,in long screenXArg,in long screenYArg,in long clientXArg,in long clientYArg,in boolean ctrlKeyArg,in boolean altKeyArg,in boolean shiftKeyArg,in boolean metaKeyArg,in unsigned short buttonArg,in EventTarget relatedTargetArg);

};

Page 63: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Evénements souris

Nom et description

click clic de souris dans l’élémentmousedown, mouseup bouton enfoncé, relachémouseover, mouseout le pointeur entre ou sort de l’élémentmousemove déplacement du pointeur

# Tous ces événements sont transmis aux ascendants (bubbling).

# Seul mousemove n’a pas de traitement par défaut (cancelable).

# Il existe également une interface WheelEvent qui dérive deMouseEvent. Le nom de l’événement est wheel

Page 64: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Evénements clavier

# Il n’existe pas dans DOM 2 !

# Introduction dans DOM 3 (depuis 2009)

# L’interface correspondante est KeyboardEvent

Page 65: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

// Introduced in DOM Level 3:interface KeyboardEvent : UIEvent {

// KeyLocationCodeconst unsigned long DOM_KEY_LOCATION_STANDARD = 0x00;const unsigned long DOM_KEY_LOCATION_LEFT = 0x01;const unsigned long DOM_KEY_LOCATION_RIGHT = 0x02;const unsigned long DOM_KEY_LOCATION_NUMPAD = 0x03;const unsigned long DOM_KEY_LOCATION_MOBILE = 0x04;const unsigned long DOM_KEY_LOCATION_JOYSTICK = 0x05;

readonly attribute DOMString char;readonly attribute DOMString key;readonly attribute unsigned long keyCode;readonly attribute unsigned long location;readonly attribute boolean ctrlKey;readonly attribute boolean shiftKey;readonly attribute boolean altKey;readonly attribute boolean metaKey;readonly attribute boolean repeat;boolean getModifierState(in DOMString keyArg);void initKeyboardEvent(in DOMString typeArg,

in boolean canBubbleArg,in boolean cancelableArg,in views::AbstractView viewArg,in DOMString keyArg,in unsigned long locationArg,in DOMString modifiersListArg,in boolean repeat);

};

Page 66: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Evénements clavier

Nom et description

keydownkeypress touches qui produisent un caractèrekeyup

Page 67: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Mutation Events

Permettent la notification d’un changement de structure de l’arbre DOM.

// Introduced in DOM Level 2:interface MutationEvent : Event {

// attrChangeTypeconst unsigned short MODIFICATION = 1;const unsigned short ADDITION = 2;const unsigned short REMOVAL = 3;

readonly attribute Node relatedNode;readonly attribute DOMString prevValue;readonly attribute DOMString newValue;readonly attribute DOMString attrName;readonly attribute unsigned short attrChange;void initMutationEvent(in DOMString typeArg,

in boolean canBubbleArg,in boolean cancelableArg,in Node relatedNodeArg,in DOMString prevValueArg,in DOMString newValueArg,in DOMString attrNameArg,in unsigned short attrChangeArg);

};

Page 68: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Html Events

Evénements relatifs à l’interface graphique.

Nom et description

focus, blur un élément gagne ou perd le focusload chargement complet d’une pageresize fenêtre du navigateur redimensionnéescroll page scrolléeunload page déchargéeabort chargement d’une page stoppée avant le charge-

ment complet d’une imageerror erreur de chargement ou dans un script

Page 69: Programmation WEB - iut-fbleau.fr©cificationontvulejour: # DOM1(1998):manipulationd’undocumenthtmlouxml. # DOM2(2001):dernièreversionfinalisée:ajoutdeméthodesde

Html Events

Evénements relatifs aux éléments de formulaire

Nom et description

change changement dans un élément de formulairereset réinialisation du formulaireselect selection de textesubmit soumission d’un formulaire