当我执行$("#item").data("counter-values")
时,array.shift()
的值如何变化。我希望jQuery每次调用它都能读取DOM并获取data属性:
function test (values) {
if (values.length) {
values.shift()
console.log(values)
test(values)
}
}
test($("#item").data("counter-values"))
(5) [12, 15, 29, 68, 9]
VM4843:4 (4) [15, 29, 68, 9]
VM4843:4 (3) [29, 68, 9]
VM4843:4 (2) [68, 9]
VM4843:4 [9]
VM4843:4 []
如果我尝试再次运行它,则该数组没有值:
test($("#item").data("counter-values"))
但是如果我没有使用jQuery的元素,那么data属性仍然存在:
var t = document.getElementById('item');
var d = plant.getAttribute('data-counter-values');
d
"[308, 12, 15, 29, 68, 9]"
如何保存值?
答案 0 :(得分:3)
这是因为jQuery.data
缓存了“ data- *”属性。
array.shift()
是一种爆炸方法,这意味着它可以修改正在调用它们的对象。因此,您正在直接修改缓存的数据。
如果要修改通过.data()
获取的数组数据,请使用array.slice()
。或者,您可以使用jQuery.attr()
来读取没有缓存的DOM数据。