Vous êtes ici : Accueil des cours Misfu > Informatique > Apprendre la programmation > Cours Javascript > Les DOM Intermédiaires

Traduction de la page Intermediate DOMs rédigée par Peter-Paul Koch et traduite par Christophe bruggeman

Attention : Cette page est ancienne .

Les DOM Intermédiaires

Le Modèle Objet de Document (DOM) est le modèle qui décrit comment sont les éléments dans une page HTML, comme les champs d'entrée, les images, les paragraphes etc…, qui sont tous liés à la structure la plus élevé: le document lui-même. En appelant l'élément par son propre nom DOM, nous pouvons l’influencer.
Cette page traite des deux DOM intermédiaire et un peu du DOM niveau 1. Le but est de vous enseigner comment écrire du DHTML compatible avec tous les navigateurs.

Définitions

Tout d'abord, je parlerai beaucoup des DOM avancés et intermédiaire. Mes définitions sont :

Sur cette page je donne d’abord les quelques principes généraux des DOM avancés, puis je décris les trois DOM avancés dans la mesure où ils sont reliés au DHTML :

  1. DOM niveau 1 (Mozilla, Explorer 5+, Opera 5+, Konqueror, Safari, iCab, Ice, OmniWeb 4.5)
  2. document.all (Explorer 4+, Opera 6+, iCab, Ice, Omniweb 4.2-)
  3. document.layers (Netscape 4, Ice, Escape, Omniweb 4.2-)

Je ne pense pas rechercher un jour les aspects non-DHTML des deux DOM intermédiaires. Ils sont sur la sortie et comparé au DOM niveau 1 ils sont trop restrictifs pour avoir beaucoup d'intérêt.

Les DOM avancés

Là où le DOM niveau 0 a seulement permis d'accéder à un nombre limité d'éléments de HTML, sur les navigateurs de version 4 les fabricants de navigateurs ont essayé de rendre le DOM plus générique, afin de permettre un accès à tous les éléments sur une page HTML et nous donner à nous les programmeurs web une manière de jouer avec leurs propriétés. Tout ne fonctionne pas dans tous les navigateurs, mais le progrès est accompli.

La raison de fournir les DOM avancés c’est de pouvoir rendre le DHTML possible: le changement des feuilles de style par le Javascript. Soudainement les navigateurs ont permis d'accéder à tous les éléments influençables sur une page. Savoir exactement quels éléments peuvent être influencés, dépend du navigateur. Netscape 4 permet seulement d’influencer des layers(couches), alors que Explorer 4 permet d’influencer beaucoup plus d'éléments HTML.

C'était la naissance des DOM avancés Tout d’abord Netscape et Microsoft avaient leurs propre DOM, respectivement document.layers et document.all; J'appelle ces derniers les DOM intermédiaires. Ensuite est venu le DOM niveau 1, mis en application dans Mozilla et explorer 5. Le DOM niveau 1 peut faire beaucoup plus que du DHTML, mais le sujet de cette page s’arrête au DHTML.

Prenons l'exemple de la page Introduction au DHTML : nous voulons déplacer un élément à une position de 200 Pixels du côté gauche de l'écran. Dans cet exemple l'élément qui doit être accédé est <DIV ID="tobechanged">.

Par le DOM ce n'est pas un problème. le document a une sorte de ‘sous-document' traitant avec l'objet tobechanged et sa propriété left. Si vous y accédez et changez correctement tobechanged.left, l'objet tobechanged sur l'écran se déplace à la position désirée à 200 Pixels de la gauche.

Le problème, bien sûr, c’est qu'il y a trois DOM avancés différent et que l'objet tobechanged a un nom différent dans chacun. Ainsi votre script doit traiter chacun des trois DOM pour créer un véritable effet compatible sur tous les navigateurs. Ce n'est pas extrêmement difficile, c’est juste un travail très précis.

DOM niveau 1 (document.getElementById)

Depuis la version 5 des navigateurs, le DOM utilisé est le plus avancé et le plus susceptible de rester en place sur les futures versions de navigateur, je le décris d'abord.

Ce DOM donne au script l'occasion d'obtenir n élément et d'exécuter la magie du DHTML dessus. Pour obtenir le <DIV> dans l'exemple, nous faisons:

document.getElementById('tobechanged')

Maintenant nous avons l'élément par ID, qui naturellement est tobechanged. Quand nous voulons changer left à 200 Pixels, nous disons

document.getElementById('tobechanged').style.left = 200;

et la magie s’opère.

Le nouveau DOM a beaucoup plus de possibilités. Voyez la page DOM niveau 1 pour plus d'information.

document.all

Le DOM d’Internet Explorer est assez semblable. Dans Internet Explorer 4+, pour faire bouger le DIV dans sa nouvelle position, nous faisons l'une ou l'autre de ces deux choses :

document.all['tobechanged'].style.left = 200;
document.all.tobechanged.style.left = 200;

Comme vous le voyez, le document.all dans Internet Explorer 4 donne l'accès aux éléments. Vous devez encore écrire quelques lignes de code spécifique à l'explorer 4, mais vous avez seulement besoin de copier le script version 5 et changer getElementById('') par all[''].

Pour fournir une compatibilité avec les versions précédentes, Microsoft a également inclus ce vieux DOM dans l'explorer 5. Si vous faites un script seulement pour Internet Explorer 4 et 5, l’utilisation de document.all sera suffisant.

Ce DOM, a également beaucoup plus de possibilités. Cependant, Microsoft ayant enlevé toutes les références au document.all de MSDN, ainsi je ne peux que les deviner. Pour rendre les choses plus complexes, Microsoft se réfère maintenant au DOM niveau 1 comme 'Modèle Objet de Document’ et au DOM document.all comme le 'Modèle Objet du DHTML' (DHTML Object Model).

document.layers

Maintenant nous arrivons à la partie sale. Le DOM de Netscape 4 est considérablement différent des deux autres. Déjà qu’il est théoriquement incertain, mais il est également bugger. En fait, même maintenant Netscape pense qu’il n’est pas bon car dans un mouvement sans précédent ils ont vidé entièrement le DOM de Netscape 4 et ils l'ont remplacé par le nouveau DOM de Mozilla, de ce fait ils ont sacrifié la compatibilité avec les versions précédentes pour reprendre sur de bonnes bases.

Netscape 4 emploie des couches (layers) comme concept principal pour son DOM. Fondamentalement les couches permettent d’obtenir un accès aux éléments, comme leurs contreparties dans les autres navigateurs, mais il y en à aussi quelques spéciales:

Notre exemple, est simple. Si nous employons l'une ou l'autre de ces deux lignes

document.layers['tobechanged'].left = 200;
document.tobechanged.left = 200;

nous obtenons le même effet qu’avec les autres navigateurs.

Indépendamment du fait de permettre un accès à la couche elle-même et aux éléments HTML situé à l'intérieur, ce DOM n'a pas un grand nombre de possibilités. C'est le plus mauvais DOM et je ne m’en occupe plus depuis qu'il est sur la sortie.

Couches en tant que documents séparés

Une des plus mauvaises choses du DOM document.layers est que Netscape 4 voit chaque couche comme un document séparé. Les éléments HTML à l'intérieur d'une couche ne peuvent pas être consultés normalement à partir du document, vous devez d’abord accéder à la couche.
Prenons cet exemple, avec notre DIV avec ID="tobechanged "à l'intérieur d'un autre DIV avec une déclaration position dans la feuille de style:

<DIV ID="stuff">
	<DIV ID="tobechanged"><IMG NAME="testimage"></DIV>
</DIV>

Pour atteindre la couche tobechanged, le code pour les autres navigateurs devrait toujours fonctionner. Ils regardent seulement ID et ils peuvent toujours accéder à l'élément de la manière décrite ci-dessus.

Mais Netscape 4 ne peut pas trouver document.tobechanged et produit des messages d'erreur. La couche tobechanged n'est pas contenue par document mais par document.stuff.document!

Ainsi le code de Netscape 4 sera un de ceux-ci:

document.stuff.document.tobechanged.left = 200;
document.layers['stuff'].document.layers['tobechanged'].left = 200;

Que diriez-vous de l'image NAME="testimage"? Dans Netscape 4 le bon vieux DOM niveau 0 appelle

document.images['testimage']

ne fonctionne pas, parce que l'image est non à l'intérieur du document mais à l'intérieur de la couche. Les appels corrects sont :

document.layers['stuff'].document.images['testimage']
document.stuff.document.images['testimage']

Si vous voulez finir la Trilogie du DOM, rendez-vous sur la page DOM niveau 1 page.


Cours JavaScript : Introduction Javascript Ajouter du Javascript Détection d'objet Déclarations Fontions String DOM Booléen DOM intermédiaire Objets This MouseOver Imprimer Détection navigateur