2010-01-22 3 views
15

je trouve très pratique pour définir les attributs comme arbitraires:Est-il considéré comme une mauvaise pratique d'utiliser des attributs HTML non standard?

<a stackoverflowId="123">...</a> 

Et en JavaScript:

var soId = $selectofA.attr('stackoverflowId'); //jQuery 

Est-ce une bonne pratique du tout? Je n'ai jamais eu de problème avec ça pour le moment.

+0

Peut-être que si vous décrivez ce que vous avez besoin pour ce que nous pouvons vous proposer la solution de contournement. La réponse stricte devrait être NON, mais il y a toujours un cas d'angle qui semble exiger d'enfreindre les règles. –

+3

Je pense que les cas où il est acceptable d'enfreindre les "règles" sont plus que les simples. – AnthonyWJones

+1

Ceci est une FAQ: http://stackoverflow.com/search?q=custom+html+attribute – dreftymac

Répondre

17

En HTML 5, vous pouvez le faire avec l'attribut data-*:

<a id="myDiv" data-stackoverflowId="123">...</a> 

Puisque vous utilisez jQuery, vous pouvez également consulter le jQuery Metadata Plugin. Il vous permettra de stocker et d'analyser les métadonnées JSON dans l'attribut class, et votre balisage sera toujours valide.

Vous seriez en mesure d'insérer vos métadonnées comme ceci:

<a class="your_class {stackoverflowId: '123'}">...</a> 

et l'extrait comme suit:

var data = $selectofA.metadata(); 
+0

En fait, je ne me soucie pas trop de HTML5, mais la compatibilité avec les navigateurs et les frais généraux (il est donc préférable d'utiliser moins de plugins). – user198729

+4

Si vous voulez être compatible avec les navigateurs actuels, ce que vous faites fonctionnera dans tous les navigateurs courants ... Cependant, l'utilisation d'un balisage valide peut vous aider à rester compatible avec les navigateurs actuels ** et futurs **. –

+5

Sérieusement, l'approche des métadonnées n'est-elle pas une insulte à la blessure? maintenant nous avons une valeur d'attribut pour la classe qui peut être CDATA en accord avec la spécification HTML et XHTML, mais ceci est très éloigné du nom de classe ou de la liste des noms de classe auxquels le navigateur s'attendrait le plus. Je ne parierais pas que mes cookies n'interfèrent pas avec le comportement normal des attributs de classe. –

7

Si vous utilisez data- attributs, il sera au moins valide HTML5. Voir John Resig's blog post on the subject.

+4

+1 Ceci est une admission par le groupe HTML5 que les gens le font de toute façon, donc nous pourrions aussi bien le standardiser. C'est mieux que de surcharger massivement l'attribut de classe comme les gens le font actuellement. –

+0

voir aussi: http://ajaxian.com/archives/custom-dom-attributes-vs-class-css-styles – dreftymac

1

Je le fais tout le temps, ça marche très bien. Jamais rencontré aucun problème avec cette technique que ce soit. Je suppose que ce n'est pas une mauvaise idée cependant d'utiliser le préfixe data- comme suggéré dans certaines des réponses. Si vous êtes vraiment paranoïaque à propos de la conformité aux normes, vous pouvez écrire le code HTML de manière conforme et définir les attributs sur le DOM dans un script. Au moins, le document va valider. Mais puisque le résultat net sera le même, vous devrez être assez malade pour favoriser cette approche à la manière naturelle de l'OMI d'étendre html comme il vous convient.

Une autre approche consiste à écrire une DTD personnalisée qui définit exactement les extensions que vous souhaitez utiliser. Cette approche est décrite en détail ici:

Fondamentalement, cette approche repose sur le placement d'une copie modifiée de la DTD XHTML à un endroit, et en utilisant un doctype qui pointe vers cette DTD personnalisée. Vous devez définir les déclarations d'attributs supplémentaires dans cette DTD modifiée et, apparemment, le validateur w3c utilisera cette DTD pour valider.

Cependant, je ne voudrais pas utiliser cette approche pour les sites Web normaux face à Internet, jamais. J'ai peur que certains navigateurs puissent aller aussi loin que d'essayer de valider le doc contre mon dtd, mais ensuite abandonner avec une erreur quelque part à mi-chemin. Cette technique DTD personnalisée n'est pas très répandue, je ne prendrais tout simplement pas la chance pour les pages Web régulières.

Questions connexes