古いjQueryバージョンでは、オブジェクトjQuery.cache
があります。これは、jQueryが特定のDOMノードに関連するデータを格納する内部目的のために使用されます。
$(selector).data("foo", "whatever");
データが格納されます。パブリックな文書はなく、直接使用することは意図していません。
実際、jQueryソースでは、$.data()
がを使用するinternalData()
を呼び出していることがわかります。 jQueryのは、2つの内部データオブジェクトを使用して、新しいjQueryのバージョン(2.xおよびより高い)において
は、状態のこのタイプを格納するためにdata_user
とdata_priv
と呼ばれ、これらのオブジェクトは、プライベートであり、jQuery.cache
を介して利用可能ではありません。
バージョン2.xからこのアーキテクチャが変更されたことがわかりましたが(確認するために実際のソース管理バージョン履歴を追跡していませんが)
jQuery $ .cacheは2.xから廃止されましたか?
はい、それは2.x以降から削除され、プライベートな内部データ構造に置き換えられているようです。
私はすべてのキャッシュされた jqueryオブジェクトの値を印刷できますか?
私は認識していません。実際、DOMオブジェクトやjQueryオブジェクトのキャッシュではなく、DOMオブジェクトに関連するデータのプライベートストアです。
あなたが本当に解決しようとしている何の問題記述することができれば、我々はおそらく、あなたがより良いものにアプローチする方法を見つけることに役立つ可能性があります。 FYI
、jQueryの2.1のソースはややアーキテクチャ変更するための動機を説明し、このコメントがあります:彼らはここにあるため、最終的に実装の詳細を非表示にする理由
/*
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
*/
最後のものは、おそらく説明を彼ら実装が内部で異なるようにWeakMap
を使用するように変更したいので、誰も現在の内部データ構造にコーディングしないようにしてください。
フィドルリンクと同様に、私はキャッシュを見て指数関数的に増加しているのか、滞在してはならない項目が滞ったり成長しているのかを見たいと思っていました。 – jensanity5000
@ jensanity5000 - 私の答えの最後にいくつか追加しました。自分のテスト目的のためにjQueryの編集版を作成せずに、新しい内部データ構造を取得する方法はないと思います。 – jfriend00