动态更改后获取数据属性

Getting a data attribute after dynamic change

我有一个简单的设置,其中属性 'data-id' 附加到元素:

<div class='row' data-id='1'>

如果我调用 alert($(.row).data(id));,我将获得我的 ID 1。 接下来我手动或通过另一个脚本将此 ID 更改为 2:

<div class='row' data-id='2'>

现在,如果我调用 alert($(.row).data(id));,我仍然会得到 1 而不是 2。

但是,如果我将方法 .data() 更改为 attr('data-id'),结果将是 2.

这种行为的原因是什么?

原因是因为 jQuery 将所有 data 属性 key/value 对存储在一个对象中,与 DOM 分开。 data() 方法从此对象读取。

当您使用 attr() 更新 data 属性时,您更新 DOM ,因此 data() 方法读取来自内存对象的旧值。

因此,最好始终使用 data() 作为 setter 和 getter。

$(.row).data('id', 'your new value')

使用上述 setter 方法更新您的 data-id

当你得到 $('.row').data('id') 之后你就会得到你的更新值

对于 Set 和 Get 属性使用 data() 而不是 attr()

<div class='row' data-id='1'>

//set attr
$(.row).data("id","NEW_VAL");

//get attr
$(.row).data("id");