为什么array.shift()会更改jQuery捕获的数据属性?

时间:2018-06-29 01:25:31

标签: javascript jquery

当我执行$("#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]"

如何保存值?

1 个答案:

答案 0 :(得分:3)

这是因为jQuery.data缓存了“ data- *”属性。 array.shift()是一种爆炸​​方法,这意味着它可以修改正在调用它们的对象。因此,您正在直接修改缓存的数据。

如果要修改通过.data()获取的数组数据,请使用array.slice()。或者,您可以使用jQuery.attr()来读取没有缓存的DOM数据。