2013-06-23 11 views
5

DOM要素をキーとしてハッシュを作成したいとします。要素をJavaScriptのハッシュのキーとして使用する

var hash = {}; 
var set = function(element, value) { hash[element] = value; }; 
var get = function(element)  { return hash[element]; }; 

set(document.getElementById('foo'), 'bar'); 
get(document.getElementById('foo')); // returns 'bar' 

どのように私は、各Elementための一意の値にそのハッシュマップを確保することができます。これは、次のコードで示されていますか?
生IDの文字列をキーとして使用することはできません。任意のElementが渡される可能性があります(idがないものも含めて)。

+1

'id'を直接使うことができるのはどうして' document.getElementById'ですか? –

+1

@KarolyHorvathこれは単純な例だったのですが、私はその要素をキーオフする必要があります。 –

+0

[この配列はユニークな配列](http://stackoverflow.com/questions/1960473/unique-values-in-an-array) – Stokedout

答えて

6

ES6までのJavaScriptでは、文字列のみをキーとして使用できます。 DOM要素を使用する場合は、2つのリンクリストまたはWeakMapオブジェクトを使用します。後者の方法の利点は、メモリリークを引き起こさないことです。あなたの例に適用

  • Firefoxの6
  • クロム19(instructions to enableを参照してください、デフォルトでは無効):書き込みのよう

    var hash = new WeakMap(); 
    hash.set(document.getElementById('foo'), 'bar'); 
    hash.get(document.getElementById('foo')); // returns 'bar' 
    

    WeakMapだけ次のブラウザでサポートされています

  • Opera 15(デフォルトでは無効になっており、有効にするには--js-flags=--harmonyでOperaを起動します)。
  • のInternet Explorer 11(confirmed to exist in leaked build)他のすべてのブラウザで

は、WeakMapサポートが​​ポリフィルをロードすることによって達成することができます。

+3

_ "この技術の仕様は安定していないため、さまざまなブラウザでの互換性表を確認してください。また、実験技術の構文と動作は仕様の変更に伴い将来のバージョンのブラウザで変更される可能性があります」_ – gdoron

+1

@ gdoron心配する場合は、[Weakmap.js](https://code.google.com/p/es-lab/source/browse/trunk/src/ses/WeakMap.js)などのpolyfillを利用できますブラウザの互換性。 –

+0

"後者の方法の利点は、メモリリークを引き起こさないことです。"私はこの場合、OPは通常の地図を使うべきだと主張します。 –

関連する問題