El .data () de jQuery hace un par de cosas pero no agrega los datos al DOM como un atributo. Cuando se usa para capturar un atributo de datos, lo primero que hace es crear un objeto de datos jQuery y establece el valor del objeto en el atributo de datos. Después de eso, se desacopla esencialmente del atributo de datos.
Ejemplo:
<div data-foo="bar"></div>
Si toma el valor del atributo utilizando .data('foo')
, devolverá "barra" como era de esperar. Si luego cambia el atributo usando .attr('data-foo', 'blah')
y luego usa .data('foo')
para tomar el valor, devolverá "barra" aunque el DOM lo indique data-foo="blah"
. Si usa .data()
para establecer el valor, cambiará el valor en el objeto jQuery pero no en el DOM.
Básicamente, .data()
es para configurar o verificar el valor de datos del objeto jQuery. Si lo está comprobando y aún no tiene uno, crea el valor en función del atributo de datos que se encuentra en el DOM. .attr()
es para establecer o verificar el valor de atributo del elemento DOM y no tocará el valor de datos jQuery. Si necesita que ambos cambien, debe usar ambos .data()
y .attr()
. De lo contrario, quédese con uno u otro.
.data()
menos que realmente tenga una razón para usar.attr()
.