HTML 5 introduce la noción de custom data attributes, que cualquiera puede crear con el fin de unir personalizados, datos ocultos para elementos con fines de scripting. Simplemente cree un atributo usando un prefijo data-
, como data-myattr1
o data-myattr2
, y llénelo con sus datos.
<div data-myattr1="myvalue1" data-myattr2="myvalue2">Content</div>
Lo bueno de esta solución es que ya funciona en todos los principales navegadores; todos analizarán los atributos desconocidos y los expondrán en el DOM para acceder mediante JavaScript. HTML5 agrega algunos mecanismos de conveniencia para acceder a ellos, que aún no se han implementado, pero solo puede usar el estándar getAttribute
para acceder a ellos por el momento. Y el hecho de que estén permitidos en HTML5 significa que su código validará, siempre y cuando esté dispuesto a usar un borrador de estándar en lugar de uno aceptado (no creo que los atributos data-
sean particularmente controvertidos, sin embargo, Me sorprendería si fueran eliminados del estándar).
La ventaja esto tiene sobre los atributos de espacios de nombres en XHTML es el IE no es compatible con XHTML, por lo que tendría que poner en práctica algo que pretende utilizar atributos de espacio de nombres, pero en realidad sólo utiliza atributos no válidos con un :
en su nombre, que es cómo IE los analizaría. Es mejor que usar class
, porque poner muchos datos en un atributo class
lo sobrecarga bastante, e implica tener que realizar un análisis adicional para extraer diferentes datos. Y es mejor que crear uno propio (que funcionará en los navegadores actuales), porque está bien definido que estos atributos con el prefijo data-
son datos privados para scripting, por lo que su código se validará en HTML5 y nunca entrará en conflicto con estándares futuros.
Otra técnica poco conocida para añadir datos personalizados a HTML, que es válido incluso en HTML 4, es la adición de script
elementos con type
atributos de algo que no sea text/javascript
(o uno de la pareja de otros tipos que se pueden utilizar para especificar JavaScript). Estos bloques de script serán ignorados por los navegadores que no saben qué hacer con ellos, y usted puede acceder a ellos a través del DOM y hacer lo que quiera con ellos. HTML5 explicitly discusses this usage, pero no hay nada que lo invalide en versiones anteriores, y funciona en todos los navegadores modernos, hasta donde yo sé. Por ejemplo, si desea utilizar CSV para definir una tabla de datos:
<div>
<script type="text/csv;header=present">
id,myattr1,myattr2
something,1,2
another,2,4
</script>
Content
</div>
Ésta es la técnica utilizada por SVG Web para permitir la incorporación de SVG en HTML, con la emulación a través de Flash si el navegador no soporta SVG nativo Actualmente, incluso los navegadores compatibles con SVG (Firefox, Safari, Chrome, Opera) no lo admiten directamente en línea en HTML, solo lo admiten directamente en línea en XHTML (porque los elementos SVG están en un espacio de nombres diferente). SVG Web le permite poner SVG en línea en HTML, usando una etiqueta de script, y luego transforma esos elementos en el espacio de nombres apropiado y los agrega al DOM, para que puedan representarse como XHTML. En navegadores que no son compatibles con SVG, también emula la función de los elementos mediante Flash.
Hasta que HTML se generalice, creo que esta es la mejor solución. –
Quise decir "HTML 5" por supuesto :) –
¿hay una forma estándar de hacer esto sin jQuery en javascript moderno? – TKoL