Document HTML - Interface au contenu d'une page web

L'objet Document défini dans la spécification DOM permet d'accéder au contenu d'une page HTML ou d'un fichier XML. Les méthodes les plus utilisées de l'objet sont getElementByTagName et getElementById ainsi que write de l'interface dérivée HTMLDocument, que l'on utilisera plutôt pour les pages web.

But de l'objet

Le Document représente donc la page entière, ses attributs indiquent comment elle est définie et ses méthodes permettent d'accéder à son contenu.
On l'utilise avec le mot-clé document:

document.write("démo")

Attributs de Document

Ce sont des attributs en lecture seule, définis lors de la création de la page.

Attributs de HTMLDocument

L'interface HTMLDocument est dérivée de Document. On accède à HTMLDocument par le nom document (et donc aussi à Document qui est la superclasse de HTMLDocument).
On accède aux attributs et aux collections par les noms suivants:

Quand aux collections, on y accède par un index comme un tableau, par exemple: form[x].

Méthodes de Document

Les méthodes de DOM peuvent prendre en paramètre un objet DOMString, qui dans la pratique est en JavaScript une simple chaîne de caractères.

Méthodes de HTMLDocument

Outre les méthodes de Document, HTMLDocument offre des fonctions supplémentaires pour modifier directement le contenu de la page.

Noter que l'on place du texte dans les balises HTML en assignant l'attribut innerHTML. La méthode write sert à créer un nouveau document de façon dynamique.

NodeList

Cette interface a un seul attribut et une seule méthode.

Node

Un node est un élément quelconque de l'arborescence du document, contenu éventuellement dans un autre et qui peut contenir des éléments (à l'exception des noeuds Text qui ne peuvent avoir d'enfant).

On ne décrira par ici cette interface qui nécessite un chapitre entier. Certains attributs et méthodes sont indispensable pour utiliser un document statique. Ils sont tous en lecture seule.

Il est possible d'assigner un Node à un Element et vice-versa, cela permet d'utiliser les méthodes de l'un ou l'autre selon le besoin. Pour accéder aux attributs (par exemple href dans le cas d'une balise a), on utilisera l'élément.

Interface Node.

HTMLCollection

Une collection HTML représente une liste de balises dans une page, telle que les images, les liens, etc.

Les méthodes retournent null en cas d'échec.

Démonstration interactive

Démonstration des méthodes de l'objet Dom Document et de l'interface HTMLDocument (qui en est dérivée) montrant comment accéder aux données.

Cliquer sur un bouton pour voir les données que l'on peut obtenir avec ces interfaces. Le code source associé au bouton est affiché à droite.

onclick="alert(document.title)"

onclick="alert(document.URL)"

onclick="alert(document.domain)"

onclick="alert(document.referrer)"

onclick="alert(document.anchors.item(0))"
Note: sans attribut name, les ancres ne sont pas incluses.

onclick="alert(document.links.item(0))"
Tous les liens sont inclus.

onclick="alert(document.doctype.name)"

Spécification du W3C

Forum

Comment récupérer un objet "INPUT"

30-12-2007 16:23:25

ghostdady

Bonjour, La dernière ligne de ce code HTML contient un objet
<input type="text" size="7" name="tf_res[0]"/>
Je n'arrive pas à le manipuler (inscrire une valeur dedans). Dans mon code, je récupère l'élément Document contenant l'iframe contenant l'objet INPUT. J'ai testé les différents "getelement" sans succès.
temp = DocOffreDeCommerce.getElementsByName("tf_res");
J'ai un retour object HTMLCollection Comment puis-je faire?
30-12-2007 16:56:42

webmaster

On y accède facilement en lui donnant un ID:
<input id="xxx" type="text" size="7" name="tf_res[0]"/>
Ensuite:
 x = document.getElementById("xxx")
x.value = "valeur"
On peut aussi y accéder avec la chaîne:
document.formular.xxx.value = "valeur"
30-12-2007 19:48:57

ghostdady

Merci de cette réponse rapide mais ce n'est pas moi qui ai codé cette page. Il m'est donc impossible de mettre un ID à cette élément. Est-ce que "document.formular.xxx " ne fonctionne qu'avec l'ID?
30-12-2007 21:50:05

ghostdady

Bon en procédant par élimination, j'ai accès à mon champ
temp = DocOffreDeCommerce.forms.length;
//alert(temp);//nombre de formulaire dans le Document
temp = DocOffreDeCommerce.forms[0].name;
//alert(temp);//un  seul formulaire donc j'affiche le nom
temp = DocOffreDeCommerce.forms[0].elements.length;
//alert(temp);//nombre d'élément dans mon formulaire
var j;
for(var i=0; i < DocOffreDeCommerce.forms[0].elements.length; i++)
   {
		//alert(DocOffreDeCommerce.forms[0].elements.name);

		if (DocOffreDeCommerce.forms[0].elements.name == "tf_res[0]")
			j = i;
   }

DocOffreDeCommerce.forms[0].elements[j].value="15000";
DocOffreDeCommerce.formular.tf_res[0].value="5000";
La première ligne fonctionne mais si j'utilise les noms ça ne fonctionne pas.
Pourquoi?
31-12-2007 14:25:43

webmaster

Est-ce que "document.formular.xxx " ne fonctionne qu'avec l'ID?
Cela peut fonctionner avec name mais ID est plus sûr. Pour le reste du code, je ne suis pas sûr que l'on puisse modifier les name dynamiquement car le DOM est construit avec les ID et les noms au moment du chargement. On peut le modifier dynamiquement, mais avec des limitations. Je pense qu'il faudrait concevoir différemment le code en utilisant uniquement des indices de tableaux et pas les noms.
31-12-2007 14:27:34

ghostdady

DocOffreDeCommerce.forms[0].elements[j].value="15000";
DocOffreDeCommerce.formular.tf_res[0].value="5000";
La première ligne fonctionne mais si j'utilise les noms ça ne fonctionne pas. Pourquoi?
31-12-2007 14:27:34

webmaster

Comme je l'ai dit, il arrive souvent que le DOM ne puisse accéder aux éléments des formulaires à partir des noms associés à l'attribut "name". D'où la préférence à l'accès par ID.
© 2008-2013 Xul.fr