2010-06-09 13 views
5

Wiem, że istnieje obiekt Hash() w strukturze prototypu JavaScript, ale czy jest coś takiego w Jquery w ten sposób?Jak utworzyć obiekt/tablicę Hash za pomocą jquery?

Chciałbym trzymać się jednej struktury javascript, zamiast mieszać działanie ramki prototypowej i frameworka JQuery i używać w tym samym czasie, ponieważ martwię się, że wystąpi konflikt i utworzę efekty uboczne.

Moje pytanie brzmi: jak utworzyć obiekt/tablicę Hash za pomocą jquery?

Oto moja funkcja:

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

Odpowiedz

0

Zerkając w dokumentacji jQuery nie mam nic, że specjalnie dla tego zobaczyć. Ale łatwo można to zrobić za pomocą jednego zwykłego obiektu 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

Podstawowym Hash można osiągnąć z podstawowym JavaScript, nie jQuery (wiem, że Hash prototypu dodaje dodatkową funkcjonalność, ale nie należy go używać tutaj).

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

Nie ma prototypowego odpowiednika skrótu w jQuery, który znam.

Czy mogą Ci się przydać następujące rzeczy? 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

Jest samodzielna realizacja tabeli mieszania nazywa jshashtable (pełne ujawnienie: Napisałem go). Używając go, Twój kod będzie następujący:

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

Dzięki temu kompaktowy i bardzo przydatny! – arturaz

3

Myślę, że nie potrzebujesz do tego 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; 
    } 
} 
Powiązane problemy