当我尝试将$ .cache的值打印到控制台时,我得到了未定义。我搜索过并且找不到这个被弃用的记录吗?
我找到了这段代码:
$("button").click( function() {
$("#target")[0].innerHTML = "";
$("<div>").appendTo( $("#target")).click( $.noop );
$("#log").text( Object.keys( $.cache ).length );
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<button>leak</button>
<div id="target"></div>
<pre id="log"></pre>
&#13;
如果你将jquery提高到1.12以上它就不再有效了,所以我怀疑它已被弃用了。
是否有类似的东西我可以打印所有缓存的jquery对象的值?
答案 0 :(得分:2)
在较旧的jQuery版本中,有一个对象jQuery.cache
。它用于内部目的,其中jQuery存储与特定DOM节点相关的数据,例如:
$(selector).data("foo", "whatever");
将存储数据。它没有公开文档,也不打算直接使用。
事实上,在jQuery源代码中,您可以看到使用$.data()
的{{1}}次调用internalData()
。
在较新的jQuery版本(2.x及更高版本)中,jQuery使用两个名为jQuery.cache
和data_user
的内部数据对象来存储这种类型的状态,这些对象是私有的,不能通过data_priv
。
看起来(虽然我没有跟踪要验证的实际源代码控制版本历史记录)此架构从版本2.x开始更改。
jQuery $ .cache是否已弃用2.x?
是的,它似乎已从2.x及更高版本中删除,并替换为私有内部数据结构。
是否有类似的东西我可以打印所有缓存的值 jquery对象?
不是我知道的。请记住,它实际上不是DOM对象或jQuery对象的缓存,而是与DOM对象相关的私有数据存储。
如果你能描述一下你真正试图解决的问题,我们可以帮助你更好地找到解决问题的方法。
仅供参考,jQuery 2.1源代码有此评论,它有点描述了改变架构的动机:
jQuery.cache
最后一个可能解释了为什么他们想在这里隐藏实现细节,因为最终他们想要改变实现以使用/*
Implementation Summary
1. Enforce API surface and semantic compatibility with 1.9.x branch
2. Improve the module's maintainability by reducing the storage
paths to a single mechanism.
3. Use the same single mechanism to support "private" and "user" data.
4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
5. Avoid exposing implementation details on user objects (eg. expando properties)
6. Provide a clear path for implementation upgrade to WeakMap in 2014
*/
,这将在内部工作不同,因此他们不希望任何人编码到他们当前的内部数据结构。