Atributos customs HTML5
Los que habrán usado alguna vez los famosos “custom attributes” o atributos personalizados en el html, conocerán que no era recomendado, nos complicaba las validaciones de HTML y también era potencialmente peligroso para futuras versiones de HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<div id="categorias" class="contendor rojo"
orden="34">
</div>
var div = document.getElementById('categorias');
var orden = div.getAttribute('orden');
div.setAttribute('otro','algunValor');
HTML5 nos trae otra forma de verlo, todo attributo custom que utilicemos, hagamoslo con “data-*”, es decir siempre con el “data-” y nuestro custom, de esta manera el validador de html no molesta, ni tampoco tendremos problemas con futuras versiones de HTML:
<!DOCTYPE HTML>
<div id="categorias" class="contendor rojo" data-orden="34">
</div>
var div = document.getElementById('categorias');
var orden = div.getAttribute('data-orden');
div.setAttribute('data-otro', 'algunValor');
jQuery .data()
jQuery tiene un metodo, jQuery.data(), para poder guardar y recuperar objetos de un elemento en particular del DOM.
$('#categorias').data('orden', 56);
Lo que hay q tener en cuenta cuando utilizo el .data() es que jquery se encarga de comprobar la version de nuestro documento y va a utilizar el “data-” o no. Ojo con esto, porque por ahi contamos con que tenemos un atributo y en realidad no:
var valores = [ 20 , 21 , 22 , 23 ];
$('#categorias').data('orden', valores);
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<div id="categorias" class="contendor rojo">
</div>
<!DOCTYPE HTML>
<div id="categorias" class="contendor rojo"
data-orden="[20,21,22,23]">
</div>
Cuando la version de HTML no es 5, jQuery no lo almacena como atributo del HTML, hay que tener cuidado con esto, porque si agregamos el atributo en el HTML y despues queremos ir a buscarlo no utilizando HTML 5, tenemos que obtenerlo como .attr() en vez de .data() en jQuery.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<div id="categorias" class="contendor rojo" orden="43">
</div>
var orden = $('#categorias').data('orden'); // undefined
var orden = $('#categorias').attr('orden'); // 43