JQuery数据选择器不使用.data更新

Ada*_*eld 63 html jquery jquery-selectors

基本上如果我有一个div加载到一个具有data-test属性的页面并使用jquery更改它的值.data('test')我不能再选择元素$('div[data-test="newValue"]')

看测试:

http://jsfiddle.net/VNaFs/1/

Ben*_*Lee 149

jQuery .data()最初使用data-属性中的值填充,但设置它只会将关联的新值存储在内存中.它不会更改DOM中的属性.要更改属性,您必须使用:

$('#one, #three').attr('data-test', 'changed');
Run Code Online (Sandbox Code Playgroud)

文档位于http://api.jquery.com/jQuery.data/

  • 好吧,所以`.data`实际上并没有操纵DOM它只是将数据保存在内存中? (9认同)
  • 哇,这让我发疯了.我可以在chrome dev工具中测试并查看值,但在页面上查看并且看不到任何更改.非常令人沮丧,特别是因为jquery文档说你可以做出改变但是没有提到这种特质. (8认同)
  • 谁决定"设置它只将相关的新值存储在内存中.它不会改变DOM中的属性."?这似乎很奇怪的功能.为什么不保持更新. (7认同)
  • 它可以在任何元素上使用,并且可以存储任意数据(不仅仅是字符串).与"数据 - "属性相关的唯一方法是,为方便起见,它会自动填充这些字符串. (3认同)
  • 不仅如此,缓存初始化后就不会再去更新。因此,例如,如果您调用“.data()”,然后设置或更改数据属性,那么将来对同一元素的“.data()”调用将不会反映这些新值。修改后的值永远不会被拉入缓存,新值也不会出现,除非通过名称“.data('foo')”请求。 (3认同)

Nic*_*tti 10

那是因为我认为.data()在jQuery 中使用一个特殊的缓存对象来存储数据(实际上你可以平均存储对象或复杂的数据),如果你检查所有的属性都没有改变.如果要更改属性,请使用attr()