2010-01-22 13 views
15

Me resulta muy conveniente para establecer los atributos arbitrarios como:¿Se considera una mala práctica usar atributos HTML no estándar?

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

Y en JavaScript:

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

¿Es una buena práctica en absoluto? Nunca he tenido un problema con esto todavía.

+0

Tal vez si usted describe lo que necesita esto para que podamos sugerir la solución. La respuesta estricta debería ser NO, pero siempre hay un caso de esquina que parece requerir la ruptura de las reglas. –

+3

Creo que los casos en los que está bien romper las "reglas" son más que simples. – AnthonyWJones

+1

Esta es una pregunta frecuente: http://stackoverflow.com/search?q=custom+html+attribute – dreftymac

Respuesta

17

En HTML 5 se puede hacer esto con el atributo data-*:

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

dado que está utilizando jQuery, es posible que también desee comprobar la jQuery Metadata Plugin. Le permitirá almacenar y analizar metadatos JSON en el atributo de clase, y su marcado aún se validará.

que sería capaz de insertar los metadatos como esto:

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

y extraerlo de la siguiente manera:

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

De hecho, no me importa demasiado HTML5, pero la compatibilidad con navegadores y sobrecarga (por lo que es mejor usar menos complementos). – user198729

+4

Si quiere ser compatible con los navegadores actuales, lo que está haciendo funcionará en todos los buscadores populares ... Sin embargo, usar el marcado válido puede ayudarlo a mantenerse compatible con los navegadores ** actuales y futuros **. –

+5

En serio, ¿no es el enfoque de los metadatos un insulto a la lesión? ahora tenemos un valor de atributo para la clase que puede ser CDATA de acuerdo con las especificaciones HTML y XHTML, pero esto está muy lejos del nombre de clase o la lista de nombres de clase que la mayoría de los navegadores esperarán. No apostaría que mis cookies no interfieren con el comportamiento normal de los atributos de clase. –

7

Si utiliza data- atributos, que al menos habrá HTML5 válido. Ver John Resig's blog post on the subject.

+4

+1 Esta es una admisión por parte del grupo HTML5 de que las personas hacen esto de todos modos, por lo que también podríamos estandarizarlo. Es mejor que sobrecargar masivamente el atributo de clase como lo hacen las personas actualmente. –

+0

vea también: http://ajaxian.com/archives/custom-dom-attributes-vs-class-css-styles – dreftymac

1

Hago esto todo el tiempo, funciona muy bien. Nunca he encontrado ningún problema con esta técnica en absoluto. Supongo que no es una mala idea usar el prefijo data- como se sugiere en algunas de las respuestas.

Si está realmente paranoico con el cumplimiento de las normas, puede escribir el código HTML de manera estándar y establecer los atributos en el DOM en un script. Al menos, el documento validará. Pero dado que el resultado neto será el mismo, tendrías que estar bastante enfermo para favorecer ese enfoque de la forma natural de la OMI de extender html a tu gusto.

Otro enfoque es escribir una DTD personalizada que defina exactamente qué extensiones desea usar. Este enfoque se describe en detalle aquí: http://www.alistapart.com/articles/customdtd/

Básicamente este enfoque se basa en colocar una copia modificada de la DTD XHTML en algún lugar, y utilizando un doctype que apunta a esa DTD personalizada. Definirías las declaraciones de atributos adicionales en esa DTD modificada, y aparentemente, el validador w3c realmente usará esa DTD para validar.

Sin embargo, nunca utilizaría este enfoque para sitios web normales con Internet. Me temo que algunos navegadores pueden ir tan lejos como tratar de validar el documento en contra de mi dtd, pero luego renunciar a un error en algún lugar a mitad de camino. Esta técnica de DTD personalizada no está muy extendida. Simplemente no me arriesgaría a tener páginas web regulares.

Cuestiones relacionadas