2010-06-09 33 views
5

Tôi biết có một đối tượng Hash() trong khung nguyên mẫu Javascript, nhưng có bất kỳ thứ gì trong Jquery như thế này không?Làm thế nào để tạo đối tượng Hash/mảng bằng cách sử dụng jquery?

Vì tôi muốn gắn bó với một khuôn khổ javascript, thay vì trộn khung công việc Prototype Frame và khung JQuery và sử dụng cùng một lúc, vì tôi lo lắng sẽ có xung đột và tạo ra các tác dụng phụ.

Vì vậy, câu hỏi của tôi là: làm thế nào để tạo đối tượng Hash/mảng bằng cách sử dụng jquery?

Đây là chức năng của tôi:

/* 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); 
    } 
} 

Trả lời

0

Liếc vào tài liệu hướng dẫn jQuery Tôi không nhìn thấy bất cứ điều gì đặc biệt cho việc này. Nhưng bạn có thể dễ dàng làm điều này với chỉ một đối tượng javascript thường xuyên:

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

Một cơ bản Hash có thể đạt được với JavaScript cơ bản, không jQuery (Tôi biết rằng Hash Prototype của bổ sung thêm chức năng, nhưng bạn không sử dụng nó ở đây).

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

Không có mẫu thử nghiệm Hash tương đương trong jQuery mà tôi biết.

Có thể sử dụng bất kỳ mục đích nào sau đây cho bạn? sử dụng 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

Có một độc lập thực hiện bảng băm gọi jshashtable (full tiết lộ: Tôi đã viết nó). Sử dụng nó, mã của bạn sẽ là:

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

Cảm ơn, nhỏ gọn và rất hữu ích! – arturaz

3

Tôi nghĩ bạn không cần jQuery cho việc này.

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; 
    } 
} 
Các vấn đề liên quan