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

jQuery 3.6中data()读取data-fetched属性值不更新问题求助

问题原因
  • jQuery 内置的 .data() 方法对 data-* 属性的读写是基于内部缓存实现的:首次读取时会拉取DOM元素上的真实属性值存入缓存,后续所有读写操作都直接操作缓存,不会同步更新DOM上的原生属性。
  • 你的代码中读取用 .data('fetched'),更新时却用 .attr('data-fetched','1') 修改DOM原生属性,jQuery的内部缓存没有被更新,所以后续每次读取拿到的都是首次缓存的0。
修复方案

推荐二选一即可,核心原则是读写data-*属性时不要混用.data()和.attr():

方案1(推荐):统一使用 .data() 读写

将AJAX成功回调中的属性更新逻辑改为用.data()写入:

// 把原来的 selected_elem.attr('data-fetched','1'); 替换为下面的代码
selected_elem.data('fetched', 1);

该方案的优势是.data()会自动做数据类型转换,你读取时不需要额外调用parseInt()也能拿到数字类型的0/1。

方案2:统一使用 .attr() 读写

将所有读取data-fetched的逻辑改为用.attr()读取:

// 原代码
let fetched = parseInt( $(this).data('fetched') );
console.log('data-fetched attribute value: ' + selected_elem.data('fetched'));

// 替换为
let fetched = parseInt( $(this).attr('data-fetched') );
console.log('data-fetched attribute value: ' + selected_elem.attr('data-fetched'));

内容的提问来源于stack exchange,提问作者Homunculus Reticulli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:21:03