2016-04-26 13 views
0

$ .cacheの値をコンソールに出力しようとすると、定義されません。私は検索し、これが非難されたかどうかの記録を見つけることができませんでしたか?

私はこのコードを発見した:

$("button").click(function() { 
 
    $("#target")[0].innerHTML = ""; 
 
    $("<div>").appendTo($("#target")).click($.noop); 
 
    $("#log").text(Object.keys($.cache).length); 
 
});
<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>

あなたが1.12より上のjQueryを上げた場合、それはもはやので、私はそれが廃止されて疑っています動作します。

キャッシュされたすべてのjqueryオブジェクトの値を印刷することができますか?

答えて

2

古いjQueryバージョンでは、オブジェクトjQuery.cacheがあります。これは、jQueryが特定のDOMノードに関連するデータを格納する内部目的のために使用されます。

$(selector).data("foo", "whatever"); 

データが格納されます。パブリックな文書はなく、直接使用することは意図していません。

実際、jQueryソースでは、$.data()がを使用するinternalData()を呼び出していることがわかります。 jQueryのは、2つの内部データオブジェクトを使用して、新しいjQueryのバージョン(2.xおよびより高い)において

は、状態のこのタイプを格納するためにdata_userdata_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を使用するように変更したいので、誰も現在の内部データ構造にコーディングしないようにしてください。

+0

フィドルリンクと同様に、私はキャッシュを見て指数関数的に増加しているのか、滞在してはならない項目が滞ったり成長しているのかを見たいと思っていました。 – jensanity5000

+0

@ jensanity5000 - 私の答えの最後にいくつか追加しました。自分のテスト目的のためにjQueryの編集版を作成せずに、新しい内部データ構造を取得する方法はないと思います。 – jfriend00

関連する問題