代码之家  ›  专栏  ›  技术社区  ›  Claudiu Creanga

为什么array.shift()更改用jquery获取的数据属性?

  •  2
  • Claudiu Creanga  · 技术社区  · 6 年前

    为什么 $("#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 回复  |  直到 6 年前
        1
  •  3
  •   suish    6 年前

    是因为 jQuery.data “data-*”属性的缓存。 以及 array.shift() 是一个bang方法,意味着它修改了被调用的对象。所以直接修改缓存数据。

    如果要修改通过 .data() ,使用 array.slice() .或者你可以用 jQuery.attr() 在没有缓存的情况下读取dom数据。