2012-04-04 12 views
2

私は作成しているjqueryによっていくつかのデータをhtmlオブジェクトに割り当てていますが、プラグインからメソッドを呼び出すと、割り当てられたデータはオブジェクトにもうありません。限り.data()生活を使用してデータ()が割り当てられているjqueryデータの存続期間はどのくらいですか?

+0

コードを投稿できますか? – Joseph

+0

データはプラグインに保存されていますが、プラグインファイルのイベントを呼び出すボタンがありますが、これまでに行ったすべてのデータを定義すると、未定義の – Johangsl

+0

プラグインコードを投稿できますか? – Joseph

答えて

5

それは.data()はどのくらいのデータの生活を理解するためにどのように機能するかを理解しておくと便利です。 .data()で何かを保存すると、jQueryの内部のjavascriptデータ構造に入ります。したがって、その点では、javasacript変数であり、他のjavascript変数が存続している限り存続します。

これは、一度ページを離れると、他のすべてのJavaScript変数と同様に完全になくなったことを意味します。

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

注:(など.removeChild()として、あるいは.innerHTMLに割り当てることによって)jQueryの機能を使用せずにDOMからDOM要素を削除する場合は、jQueryのは、あなたがそれらのDOM要素を削除したことを知らないだろうと.data()情報は清掃されることはありません基本的にメモリ内にスペースを無駄にしてしまいます。余分なメモリを消費する以外に何らかの害を引き起こすことはありません。その.data()情報に他のjavascriptまたはDOM要素への参照が含まれていると、さらに大きなメモリリークが発生する可能性があります。

.data()を使用している場合は、DOM要素が削除される可能性のあるものについてjQueryメソッドを使用したい場合が1つ作成されます。通常、jQueryでは、プレーンなjavascriptとjQueryを混在/マッチングすることは自由ですが、そうしないでください。

+0

問題を解決しました! – Johangsl

1

データ:

  • jQueryのあなたのページにまだあります。 jQueryは.data()を使用してデータにinternal cacheを使用します。それは決してDOMの上にはありません。

  • 限り、あなたはデータをバインド要素がDOMに削除まわり場合や、まだあるとして、それはあなたがページをリロードしないでください.detach()

  • により除去しました。 .data()に格納されたデータは、ページの再読み込みによって保持されません。

+0

データはプラグインに保存されていますが、plugnファイル内のイベントを呼び出すボタンがありますが、これまでにすべてのデータを実行すると、定義されていない – Johangsl

+0

の問題が解決しました! – Johangsl

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

jQuery.data()方法は、私たちは循環参照から安全とメモリリークのため、自由な方法でDOM要素に任意の型のデータを添付することができます。 jQueryは、jQueryメソッドを使用してDOM要素を削除したとき、およびユーザーがページを離れるときにデータが確実に削除されるようにします。我々は、単一の要素のいくつかの個別の値を設定することができますし、後でそれを取得:

関連する問題