You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery .data()方法未添加data属性的原因及解决方法

为什么jQuery的.data()没有添加DOM属性?如何实现需求?

这是个很常见的误解——jQuery的.data()方法并不会直接修改DOM元素的data-*属性,它是把数据存储在jQuery内部维护的一个缓存对象里,和DOM本身的属性是完全分开的。

具体原因:

  • 当你第一次调用.data()读取数据时,jQuery会先读取DOM上的data-*属性,把它们存入内部缓存;之后再访问.data()就直接从缓存取值,不会再去读取DOM。
  • 反过来,当你用.data()设置数据时,只会更新这个内部缓存,不会同步修改DOM上的data-*属性,所以你在开发者工具里看不到这些属性的变化。

实现你的需求(在DOM上添加data-*属性):

如果你确实需要在DOM元素上直观看到这些data-*属性,应该使用.attr()方法来设置,而不是.data():

$(function(){
  $("div").attr({
    "data-one": 1,
    "data-two": 2
  });
})

执行这段代码后,DOM元素就会变成你期望的样子:

<div data-one="1" data-two="2">what ever</div>

补充说明:

如果你既需要把数据存在jQuery缓存里,又需要同步更新DOM属性,可以先调用.data(),再手动用.attr()同步,但一般来说没必要——只有当你需要让这些属性被其他非jQuery的代码读取,或者需要在DOM结构中直观看到时,才需要这么做。大多数场景下,使用.data()存储数据已经足够:它性能更好,还能存储复杂类型的数据(比如对象、数组),而data-*属性只能存储字符串。

内容的提问来源于stack exchange,提问作者Martin AJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:26:31