2010-06-09 61 views
5

我知道JavaScript原型框架中有一個Hash()對象,但是在這種情況下Jquery中有什麼嗎?如何使用jQuery創建哈希對象/數組?

正如我想堅持一個JavaScript框架,而不是混合原型框架工作和JQuery框架,並在同一時間使用,因爲我擔心會有衝突併產生副作用。

所以我的問題是:如何使用jQuery創建哈希對象/數組?

這裏是我的功能:

/* prototype framework, I want to change this to jQuery! */ 
var starSaves = new Hash(); 

function myHover(id, pos) 
{ 
    var starStrip = $('star_strip_' + id);  
    if (starSaves.keys().indexOf(id) == -1) 
    { 
     var starSave = new Array(); 
     var imgs = starStrip.select("img") 
     alert(imgs); 
     for (var i = 0; i < imgs.length; i++) 
     { 
      starSave[starSave.length] = imgs[i].src; 
      if (i < pos) 
       imgs[i].src = "/images/star_1.gif"; 
      else 
       imgs[i].src = "/images/star_0.gif"; 

     } 
     starSaves.set(id, starSave); 
    } 
} 

回答

0

在jQuery的文檔掃視我沒有看到任何東西,專門針對這一點。但是你可以很容易地只是一個普通的JavaScript對象做到這一點:

var starSaves = {}; 
function myHover(id, pos) 
{ 
    var starStrip = $('star_strip_' + id);  
    if (typeof starSaves[id] == 'undefined') 
    { 
     var starSave = new Array(); 
     var imgs = starStrip.select("img") 
     alert(imgs); 
     for (var i = 0; i < imgs.length; i++) 
     { 
      starSave[starSave.length] = imgs[i].src; 
      if (i < pos) 
       imgs[i].src = "/images/star_1.gif"; 
      else 
       imgs[i].src = "/images/star_0.gif"; 

     } 
     starSaves[id] = starSave; 
    } 
} 
4

基本Hash可以用基本的JavaScript,而不是jQuery的(我知道原型的哈希增加了額外的功能,但是你不要在這裏使用它來實現)。

var starSaves = {}; 

function myHover(id, pos) 
{ 
    if (!starSaves.hasOwnProperty(id)) { 
     var starSave = starSaves[id] = []; 

     $('#star_strip_' + id + ' img').attr('src', function (index, current) { 
      starSave.push(current); 

      return (index < pos) ? '/images/star_1.gif' : '/images/star_0.gif'; 
     });   
    } 
} 
0

在我所知的jQuery中沒有原型哈希等價物。

請問以下幾點對你有用嗎? 使用jQuery

var starSaves = {}; 

function myHover(id,pos) 
{ 
    var starStrip = $('.star_strip_' + id); 
    if(!starSaves[id]) 
    { 
     var starSave = []; 
     starStrip.each(function(index,element){ 
      starSave[index] = $(element).attr('src'); 
      $(element).attr('src', index < pos ? '/images/star_1.gif' : '/images/star_0.gif'); 
     }); 
     starSaves[id] = starSave; 
    } 
} 
5

有一個獨立的哈希表實現調用jshashtable(全面披露:我寫的)。使用它,你的代碼將是:

var starSaves = new Hashtable(); 

function myHover(id, pos) 
{ 
    var starStrip = $('star_strip_' + id); 
    if (!starSaves.containsKey(id)) 
    { 
     var starSave = new Array(); 
     var imgs = starStrip.select("img") 
     alert(imgs); 
     for (var i = 0; i < imgs.length; i++) 
     { 
      starSave[starSave.length] = imgs[i].src; 
      if (i < pos) 
       imgs[i].src = "/images/star_1.gif"; 
      else 
       imgs[i].src = "/images/star_0.gif"; 

     } 
     starSaves.put(id, starSave); 
    } 
} 
+0

謝謝,它的小巧,非常有用! – arturaz 2012-04-06 09:08:13

3

我認爲你不需要這個jQuery。

var hashtable = { 
    hash: {}, 
    exists: function(key){ 
     return this.hash.hasOwnProperty(key); 
    }, 
    get: function(key){ 
     return this.exists(key)?this.hash[key]:null; 
    }, 
    put: function(key, value){ 
     this.hash[key] = value; 
    } 
}