Attributs de données personnalisés: http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-data
Quand je dis «travail», je veux dire, si j'ai du HTML comme celui-ci:
<div id="geoff" data-geoff="geoff de geoff">
sera le JavaScript suivant:
var geoff = document.getElementById('geoff');
alert(geoff.dataGeoff);
produire, dans IE 6, une alerte avec «geoff de geoff»?
data-geoff
n'est pas un identifiant JS valide en raison du caractère "-". Vous auriez besoin d'utiliserdataGeoff
dans les scripts.geoff.dataGeoff
n'a pas fonctionné. Il s'est avéré ( whatwg.org/specs/web-apps/current-work/multipage/… ) que cela devrait êtregeoff.dataset.geoff
, mais commeelement.dataset
c'est toujours le casundefined
dans les navigateurs modernes, ce n'est ni pris en charge.Réponses:
Vous pouvez récupérer les valeurs des attributs personnalisés (ou les vôtres) à l'aide de
getAttribute
. Suivre votre exemple avecJe peux avoir la valeur d'
data-geoff
utiliserVoir MSDN . Et bien qu'il soit mentionné ici que vous avez besoin d'IE7 pour que cela fonctionne, je l'ai testé il y a un moment avec IE6 et cela fonctionnait correctement (même en mode bizarreries).
Mais cela n'a rien à voir avec les attributs spécifiques à HTML5, bien sûr.
la source
Oui, ils fonctionnent.
IE a pris en charge
getAttribute()
depuis IE4, ce que jQuery utilise en internedata()
.Vous pouvez donc soit utiliser la
.data()
méthode de jQuery, soit du JavaScript simple:Exemple de HTML
Javascript
jQuery
la source
Note: All browsers can already use data-* attributes and access them using getAttribute. "Supported" refers to accessing the values using the dataset property. Current spec only refers to support on HTML elements, only some browsers also have support for SVG/MathML elements.
<div lala="Tom"></div>
, est-ce que ça irait dans IE6? Comment lisez-vous la valeur?Non seulement IE6 ne prend pas en charge la fonction d'attribut de données HTML5, mais en fait pratiquement aucun navigateur actuel ne les prend en charge! La seule exception pour le moment est Chrome.
Vous êtes parfaitement libre d'utiliser
data-geoff="geoff de geoff"
comme attribut, mais seul Chrome des versions actuelles du navigateur vous donnera la.dataGeoff
propriété.Heureusement, tous les navigateurs actuels - y compris IE6 - peuvent référencer des attributs inconnus en utilisant la
.getAttribute()
méthode DOM standard , donc.getAttribute("data-geoff")
fonctionnera partout.Dans un avenir très proche, les nouvelles versions de Firefox et Safari commenceront à prendre en charge les attributs de données, mais étant donné qu'il existe un moyen parfaitement efficace d'y accéder qui fonctionne dans tous les navigateurs, il n'y a vraiment aucune raison d'utiliser la méthode HTML5 qui ne fonctionnent que pour certains de vos visiteurs.
Vous pouvez en savoir plus sur l'état actuel de la prise en charge de cette fonctionnalité sur CanIUse.com .
J'espère que cela pourra aider.
la source
dataset
propriété, mais tous les navigateurs vous permettent de stocker des données dans des attributs avec un préfixe dedata-
, et (comme vous le dites) de les récupérer viagetAttribute
. Donc, dans un sens, ils prennent en charge la fonctionnalité, car vous pouvez utiliser les attributs eux-mêmes efficacement.dataset
lequel il n'y a aucune raison d'utiliser la propriété pour y accéder - je ne sais pas quels avantages il est censé offrirgetAttribute
..dataXYZ
propriétés; comme vous le dites, la fonctionnalité de base est largement prise en charge, mais pas parce qu'elle est HTML5.Je pense que IE a toujours soutenu cela (au moins à partir de IE4) et vous pouvez y accéder à partir de JS. Ils étaient appelés «propriétés expansibles». Voir l' ancien article MSDN
Ce comportement peut être désactivé en définissant la propriété expando sur false sur un élément DOM (c'est vrai par défaut, donc les propriétés expando fonctionnent par défaut).
Edit: correction de l'URL
la source
Si vous souhaitez récupérer tous les attributs de données personnalisés à la fois, comme la propriété de l'ensemble de données dans les navigateurs plus récents, vous pouvez effectuer les opérations suivantes. C'est ce que j'ai fait et fonctionne très bien pour moi dans ie7 +.
la source
Dans IE6 , cela peut ne pas fonctionner. Pour référence: MSDN
Je suggère d'utiliser jQuery pour gérer la plupart des cas:
Essayez ceci dans votre codage.
la source