我想使用 jQuerydata()
api 用于检索元素的所有数据属性。但这个 api 的缓存性质确实很烦人。有时我需要更改 javascript 中元素的某些数据属性,但是data()
api 始终返回每个数据属性的初始值。所以我必须使用attr()
访问元素的每个数据属性以获取其最新值。有什么办法可以克服这个缓存问题并使data()
每次调用时总是返回最新值?
简短的回答是:不要使用 jQuery .data() 动态设置数据属性,除非你能保证数据属性始终由 jQuery 设置.
以下任一解决方案都有效:
- 使用普通 JS
.getAttribute()
instead
- 使用 jQuery
.attr()
instead
这是jQuery 文档中的相关部分 http://api.jquery.com/data/#data-html5(我认为这并没有真正凸显出这可能会让 jQuery 用户感到多么惊讶):
data- 属性在第一次访问数据属性时被拉取,然后不再被访问或改变(然后所有数据值都存储在 jQuery 内部).
关于为什么你可能not使用 jQuery 设置属性:许多客户端模板语言构建 DOM,包括数据属性。
给定动态构建的 HTML(如 DevTools 中所示:
<form data-test="300" ...
DOM API 说的是实话:
document.querySelector('form').getAttribute('data-test');
JQuery 返回过时的先前值(在本例中为 19000):
$('form').data('test');
jQuery attr
返回当前值:
$('form').attr('data-amount');
香草JSgetAttribute()
返回当前值:
document.querySelector('form').getAttribute('data-amount');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)