私が作成しているjqueryによっていくつかのデータをhtmlオブジェクトに割り当てています。問題は、プラグインからメソッドを呼び出すと、割り当てたデータがオブジェクトにもうないということです。
3 に答える
.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 つのケースです。
jQuery.data()
ドキュメントから:
この
jQuery.data()
メソッドを使用すると、循環参照から安全であり、したがってメモリリークが発生しない方法で、任意のタイプのデータをDOM要素にアタッチできます。jQueryは、DOM要素がjQueryメソッドを介して削除されたとき、およびユーザーがページを離れたときにデータが削除されることを保証します。1つの要素にいくつかの異なる値を設定し、後でそれらを取得できます。