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

时间:2015-05-23 14:55:12

标签: javascript jquery

https://api.jquery.com/data/应用于一组选定元素时会发生什么?它是在内部循环匹配的集合并在每个元素上存储数据的单独“副本”吗?或者是否有人存储了一个应用于匹配的集合对象的副本?我下面的小测试案例似乎意味着两者都在发生。鉴于我希望的结果是将相同的数据应用于每个元素,我的第一种或第二种方法是从速度/内存/语义/等角度设置数据首选吗?

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());

1 个答案:

答案 0 :(得分:2)

数据附加到每个元素。在内存中,存在由数据组成的副本。您可以通过运行以下来查看副本:

console.log($.cache)

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

有关.data存储数据的详细信息,请参阅this answer,其中还指出了source is available的事实。