2

私が作成しているjqueryによっていくつかのデータをhtmlオブジェクトに割り当てています。問題は、プラグインからメソッドを呼び出すと、割り当てたデータがオブジェクトにもうないということです。

4

3 に答える 3

5

.data()データの存続期間を理解するには、 がどのように機能するかを理解することが役立ちます。で何かを保存すると.data()、jQuery の内部 JavaScript データ構造に入ります。したがって、その点では、これは単なる javascript 変数であり、他の javascript 変数が存続する限り存続します。

つまり、ページを離れると、他のすべての JavaScript 変数と同様に、ページは完全に消えてしまいます。

データを削除できるもう 1 つの方法は、一部の JavaScript コードがデータ構造からデータを明確に削除した場合です。これは通常、DOM オブジェクトを意図的に破棄する jQuery メソッドを使用した場合にのみ発生します。これは、DOM から要素を削除するその他の jQuery メソッドを使用$(elem).remove()して行うことができます。これらのメソッドは DOM からオブジェクトを削除するため、jQueryはそれらの要素に関連付けられ$(elem).html("some html)た情報を「クリーンアップ」します。.data()これに対する 1 つの特定の例外.detach()は、要素を DOM から削除しますが、その情報は削除しません.data()。これは、DOM から削除できるようにするために意図的に行われますが、おそらくその状態を保持して、別の場所または後で DOM に戻すことができるようにします。

注: jQuery 関数を使用せずに DOM 要素を DOM から削除した場合 (.removeChild()または への代入など.innerHTML)、jQuery はそれらの DOM 要素が削除されたことを認識せず、.data()情報はクリーンアップされません。メモリ内のスペースを無駄にします。余分なメモリを消費する以外に害はありません。その.data()情報に他の JavaScript または DOM 要素への参照が含まれていると、さらに大きなメモリ リークが発生する可能性があります。

これを使用し.data()ている場合、DOM 要素が削除される原因となる可能性のあるものについては、jQuery メソッドを使い続けたいというケースが 1 つ作成されます。通常、jQuery では、プレーンな JavaScript と jQuery を自由に組み合わせることができますが、これはそうすべきではない 1 つのケースです。

于 2012-04-04T23:01:46.433 に答える
1

使用するデータは、次の場合.data()に限り有効です。

  • jQueryはまだページにあります。jQueryは、を使用するデータに内部キャッシュ.data()を使用します。DOMにはありません。

  • データをバインドした要素がまだ存在している限り、またはDOMで削除された場合は、.detach()

  • ページをリロードしません。に保存されたデータ.data()は、ページのリロードを通じて保持されません。

于 2012-04-04T22:56:32.400 に答える
1

jQuery.data()ドキュメントから:

このjQuery.data()メソッドを使用すると、循環参照から安全であり、したがってメモリリークが発生しない方法で、任意のタイプのデータをDOM要素にアタッチできます。jQueryは、DOM要素がjQueryメソッドを介して削除されたとき、およびユーザーがページを離れたときにデータが削除されることを保証します。1つの要素にいくつかの異なる値を設定し、後でそれらを取得できます。

于 2012-04-04T22:59:15.910 に答える