2013-06-23 14 views
5

DOM öğeleriyle bir karma anahtarı oluşturmak istiyorum.JavaScript'te bir Hash anahtarı olarak bir Öğe Kullanma

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' 

Nasıl her Element için benzersiz bir değere gelen esrar haritalar sağlayabilirsiniz: Bu aşağıdaki kod ile gösterilmiştir?
Ham ID dizesini anahtar olarak kullanamayacağımı unutmayın, çünkü herhangi bir keyfi Element, kimliği olmayanlar da dahil olmak üzere içeri aktarılabilir.

+1

Neden "id" 'i doğrudan kullanabildiğinizi document.getElementById'? –

+1

@KarolyHorvath Üzgünüz, bu basitleştirilmiş bir örnekti. –

+0

[Bu diziyi benzersiz dizilerde kontrol etmek isteyebilirsiniz] (http://stackoverflow.com/questions/1960473/unique-values-in-an-array) – Stokedout

cevap

6

ES 6'ya kadar JavaScript'te, yalnızca anahtarlar anahtar olarak kullanılabilir. DOM öğelerini kullanmak isterseniz, iki bağlantılı liste veya WeakMap nesnesini kullanın. İkinci yöntemin bir avantajı, bellek sızıntılarına neden olmamasıdır. Şu tarayıcılar WeakMap desteklendiğinden, yazı olarak

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

:

sizin örneğe Uygulanan
  • Krom 19

    , WeakMap destek WeakMap.js polyfill yükleyerek elde edilebilir.

  • +3

    _ "Bu teknolojinin spesifikasyonu dengelenmediğinden, çeşitli tarayıcılarda kullanım için uyumluluk tablosunu kontrol edin. Ayrıca, deneysel teknolojinin sözdizimi ve davranışı, teknik özelliklerin geldiği tarayıcı sürümlerinde de değişebilir." _ – gdoron

    +1

    @ gdoron Eğer endişelenmeniz durumunda, [Weakmap.js] (https://code.google.com/p/es-lab/source/browse/trunk/src/ses/WeakMap.js) gibi bir polyfill kullanılabilir. Tarayıcı Uyumluluğu. –

    +0

    "İkinci yöntemin bir avantajı, bellek sızıntılarına neden olmamasıdır." Bu durumda tartışacağım OP sadece düzenli bir harita kullanmalıdır. –

    İlgili konular