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
相关产品推荐
相关产品推荐

