Attributs de contenu et propriétés du modèle DOM

Dans les versions antérieures de Windows Internet Explorer, les attributs de contenu étaient représentés sur les objets JavaScript en tant qu’expandos DOM (Document Object Model). À partir de Windows Internet Explorer 9, les attributs de contenu ne sont plus connectés aux expandos DOM ; cela améliore l’interopérabilité entre Internet Explorer et d’autres navigateurs.

Un attribut de contenu est un attribut spécifié dans la source HTML, par exemple, <element attribute1="value" attribute2="value">. De nombreux attributs de contenu sont prédéfinis dans le langage HTML, qui prend également en charge des attributs de contenu définis par l’utilisateur.

Les expandos DOM sont les valeurs qui peuvent être récupérées d’un objet en JavaScript, par exemple, document.all["myelement"].domExpando. La plupart des objets possèdent un ensemble prédéfini de propriétés qui représentent généralement la valeur de leur attribut de contenu de même nom. JavaScript prend également en charge des propriétés définies par l’utilisateur.

Dans l’exemple suivant, id et class sont des attributs de contenu prédéfinis dans HTML, tandis que myAttr est un attribut de contenu défini par l’utilisateur :


<div id="myElement" class="b" myAttr="custom"></div>

Dans l’exemple de script suivant, id et className sont des propriétés prédéfinies :


var div = document.getElementById("myElement");
var divId = div.id; // Gets the value of the id content attribute
var divClass = div.className; // Gets the value of the class content attribute


Dans Windows Internet Explorer versions 8 et antérieures (y compris le mode standard d’IE 8 et les modes antérieurs dans Internet Explorer 9), la présence de l’attribut de contenu myAttr supposait la présence d’un expando DOM myAttr :


var divExpando = div.myAttr; // divExpando would get the value "custom" in IE8


Il en va différemment dans Internet Explorer 9, où la présence d’attributs de contenu définis par l’utilisateur n’est plus tributaire de la présence d’expandos DOM :


var divExpando = div.myAttr; // divExpando would get an undefined value

La récupération d’une valeur définie par l’utilisateur d’un expando DOM fonctionne normalement en mode IE 8, mais une variable non définie est retournée dans le mode standard d’IE 9.

Ce problème peut se manifester sous la forme d’une erreur de script, mais il est rarement constaté directement au niveau du point de défaillance dans le programme JavaScript. En règle générale, l’échec est plutôt constaté ultérieurement quand la valeur vraisemblablement récupérée de l’expando DOM est utilisée dans une autre partie du code.

Pour résoudre ce problème, utilisez l’API getAttribute pour récupérer la valeur des attributs de contenu définis par l’utilisateur. Cette solution de contournement est recommandée pour toutes les versions d’IE et ne nécessite pas de traitement particulier pour les nouvelles versions par rapport aux versions antérieures d’IE.

Au lieu d’utiliser ce code :


var divExpando = div.myAttr;


Utilisez ce code :


var divExpando = div.getAttribute("myAttr");

Rubriques connexes

 

 

Afficher:
© 2014 Microsoft