2010-06-09 51 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; 
    } 
}