为jQuery $ .data()存储多个值的最佳方法是什么?

时间:2009-06-02 23:00:50

标签: jquery dom storage

如果在大量div上存储多个(10+)值,将它们全部存储在单个对象中,还是作为单独的值更合适?

单个对象:

$("#div_id").data("data", {foo:1, bar:2});

单独的值:

$("#div_id")
  .data("foo", 1)
  .data("bar", 2);

每种方法的权衡取舍是什么?其中一些属性将被频繁访问(例如在事件回调期间,例如拖动)。

3 个答案:

答案 0 :(得分:10)

在1.4中你可以这样做:

$('#somediv').data({ one : 1, two : 2, three : 3 });

这是初始化数据对象的好方法。但是,在1.4.2中,请记住使用此表单将替换此元素的任何现有数据。所以,如果你试试这个:

$('#somediv').data( 'one', 1 );

$('#somediv').data({ two : 2, three : 3 });

你将吹走'一个'的价值。

(就个人而言,我认为这是一种耻辱,因为jQuery已经广泛使用与$ .extend合并对象。我不清楚为什么在这里没有使用它。)

更新(建议用户:@ricka,谢谢):

1.4.3及以上,它合并数据(http://api.jquery.com/data/#data-obj):

  

在jQuery 1.4.3中使用.data(obj)设置元素的数据对象   扩展先前使用该元素存储的数据。 jQuery本身   使用.data()方法在名称'events'下保存信息   和'处理',并保留以。开头的任何数据名称   下划线('_')供内部使用。

     

在jQuery 1.4.3之前(从jQuery 1.4开始).data()方法   完全替换了所有数据,而不仅仅是扩展数据   宾语。如果您使用的是第三方插件,则可能不建议使用   完全替换元素的数据对象,因为插件可能   还设置了数据。

答案 1 :(得分:6)

如果两种方法在代码中都很容易使用,那就去存储一个对象。它避免了每次需要值时调用data()方法的额外开销。这样,您可以通过一次调用data()来获取映射对象,然后根据需要多次从该对象中检索值,而无需再次调用data()

data()方法使用对象将元素映射到引擎盖下的键/值,因此与自己管理映射对象相比,它没有提供任何性能改进。

答案 2 :(得分:3)

我可能会做类似的事情:

var data = $("#div_id").data();   
data.foo=1;  
data.bar=2;