将jQuery's .data()方法应用于所选元素组的效果是什么?

What is the effect of applying jQuery's .data() method to group of selected elements?

本文关键字:元素 是什么 应用于 方法 jQuery data      更新时间:2023-09-26

当我对一组选定的元素应用https://api.jquery.com/data/时会发生什么?它是否在内部循环遍历匹配的集合,并在每个元素上存储数据的单独"副本"?或者是否有人存储了一个应用于匹配set对象的副本?我下面的小测试用例似乎暗示这两种情况都在发生。考虑到我期望的结果是将相同的数据应用于每个元素,从速度/内存/语义等角度来看,我的第一或第二种设置数据的方法是首选的吗?

http://jsfiddle.net/toyh8fty/1/

<p id="id1">1</p>
<p id="id2">2</p>
<p id="id3">3</p>
var v = {
    a: 1,
    b: 2,
    c: 3
};
var p = $('p');
console.log(p);
p.data(v).each(function () {
    var $t = $(this);
    console.log(this, $t, $t.data());
});
console.log($('#id1').data());
console.log('p.data', p.data());
p.each(function () {
    var $t = $(this);
    $t.data(v);
    console.log(this, $t, $t.data());
});
console.log($('#id1').data());
console.log('p.data', p.data());

数据被附加到每个元素。在内存中,有数据的副本。您可以通过以下命令查看副本:

console.log($.cache)

我添加了一些输出,并在这个修改的fiddle中更改了一个值(这引起了它自己的问题),但是您应该能够看到数据独立存储在每个匹配的元素上。p.data()只是给你一个总结。

有关.data如何存储数据的更多信息,请参阅此答案,该答案还指出了源可用的事实。