2012-02-11 15 views
8

これは間違っていますか?もしそうなら、なぜですか?dom要素にカスタムデータを格納する

var elm = document.getElementById("myElm"); 
elm.customValue = {attr1 : "test", attr2 : "test"}; 

私は、データ属性を使用する方法を理解するが、私はすべてのそれらの属性を持つ私のDOMをアップ濁っする必要はありません。

答えて

6

これは、ネイティブCオブジェクト(DOM要素)とJSオブジェクトを一緒にバインドし、ガベージコレクションアルゴリズムでこれを処理できないため、一部のブラウザでメモリリークが発生します。 IEはその一つです。ここで

は、IEのメモリリークについてのMSDNの記事です:http://msdn.microsoft.com/en-us/library/ie/bb250448(v=vs.85).aspx

+6

適切なコンテキストでは、問題のオブジェクトがDOMから削除され、ガベージコレクションされると予想される場合にのみメモリリークが発生します。そして、DOM要素に関連付けられたデータが巨大である場合や、作成された数千のDOM要素がDOMから削除された場合にのみ、メモリリークが発生します。あなたのページの生涯にわたってDOMにとどまっているオブジェクトの場合、メモリリークはありません。 – jfriend00

+0

良いメモ!リークが発生するためには、要素を削除する必要があることを忘れてしまいました。 –

+0

すばらしい入力ユーザー!ありがとう! –

3

ボトムラインは、なぜあなたは利用できる適切なツールを使用していないだろうか?将来、近いか遠いか、あなたが使用しているカスタムプロパティ名がその特定の要素のw3c仕様に追加されるかどうかは分かりません。さて、突然あなたのコードが壊れています。

既にプロパティを定義している要素にカスタムプロパティを追加すると、コードがメンテナンスの悪夢になることはありません。あなたや他の誰かが将来それを維持しているかどうかに関わらず、開発者がa)カスタムプロパティが要素に追加された場合、またはb)要素自体が実際にaカスタムオブジェクト。

最後に、その要素がAjaxまたは動的HTMLを介してdom内で置き換えられる場合はどうなりますか?プロパティがなくなり、コードが壊れました。

+3

あなたの言っていることのどれも意味をなさない... –

+0

何が意味がありませんか? –

関連する問題