JQuery .data() not working?

前端 未结 2 592
伪装坚强ぢ
伪装坚强ぢ 2020-12-02 18:09

Recently I was coding away, and I ran into a weird issue. I was attempting to assign a data attribute to a new element I had created (via jQuery), only to discover it would

相关标签:
2条回答
  • 2020-12-02 18:50

    data doesn't set data-* attributes. It manages a data cache unrelated to data-* attributes. It initializes from data-* attributes if there are any present, but never writes to them. To write to an attribute, use attr.

    Example: Updated Fiddle

    var div = $("<div />")
    $(div).attr("data-foo", "bar")
    console.log($(div)[0].outerHTML)
    

    What you're seeing is just one of the many ways this can be surprising. Another is that if your markup is <div id="elm" data-foo="bar"></div> and at some point you use $("#elm").data("foo") to get the value (and it will indeed be "bar"), then you do $("#elm").data("foo", "update"), the attribute remains data-foo="bar" but the data managed by data now has foo equal to "update". But the rule above explains it: data never writes to data-* attrs.

    0 讨论(0)
  • 2020-12-02 18:50

    jQuery imports the data- attributes when the element is loaded, but does not access it afterwards. The elements are stored in a jQuery internal structure. From the API:

    The data- attributes are pulled in the first time the data property is accessed and then are no longer accessed or mutated (all data values are then stored internally in jQuery).

    0 讨论(0)
提交回复
热议问题