下面是一个简单的例子来说明行为:
给定这个html标记:
<div data-company="Microsoft"></div>
和这个jQuery代码(使用jQuery 1.5.1):
// read the data
alert($("div").data("company"));
// returns Microsoft <<< OK!
// set the data
$("div").data("company","Apple");
alert($("div").data("company"));
// returns Apple <<< OK!
// attribute selector
alert($("div[data-company='Apple']").length);
// returns 0 <<< WHY???
// attribute selector again
alert($("div[data-company='Microsoft']").length);
// returns 1 <<< WHY???
// set the attribute directly
$("div").attr("data-company","Apple");
alert($("div[data-company='Apple']").length);
// Now returns 1 <<< OK!
由于jQuery自动将HTML5 data- *导入jQuery的数据对象,因此当数据更改时,属性是否应该更新?
解决方法
通常,如果你使用.data()来访问/设置/修改DOM元素上的数据,则不需要往返.data()。因此,避免为每个.data()set / modify操作(.data()在jQuery.cache中存储其值)访问DOM的性能开销是有意义的。
如果你想自己强制往返行为,可以订阅“setData”或“changeData”事件,然后通过.attr()将这些事件中的.data()更新推送到相应的DOM元素。