Tengo una configuración simple con un atributo 'id de datos' adjunto al elemento:
<div class='row' data-id='1'> Si llamo alert($(.row).data(id)); Obtendré mi identificación 1. Lo siguiente que hago es cambiar esta identificación manualmente o mediante otro script a, por ejemplo, 2:
<div class='row' data-id='2'> y ahora si llamo alert($(.row).data(id)); Todavía obtendré 1 en lugar de 2.
Sin embargo, si cambio el método .data() a attr('data-id') el resultado será 2.
¿Cuál es la razón de tal comportamiento?
El motivo es que jQuery almacena todos los pares clave/valor de atributos data en un objeto, separado del DOM. El método data() lee de este objeto.
Cuando actualiza el atributo data usando attr() , actualiza solo el DOM, por lo tanto, el método data() lee el valor anterior del objeto en memoria.
Por esta razón, siempre es mejor usar data() como setter y getter.
$(.row).data('id', 'your new value') Use el método de configuración anterior para actualizar su valor data-id
Después de obtener $('.row').data('id') , obtiene su valor actualizado
Para establecer y obtener atributos, use data() en lugar de attr()
<div class='row' data-id='1'> //set attr $(.row).data("id","NEW_VAL"); //get attr $(.row).data("id");