5

I know there is a Hash() object in the Javascript prototype framework, but is there anything in Jquery like this?

As I would like to stick with one javascript framework, rather than mixing the Prototype Frame work and the JQuery framework and use at the same time, as I worry there will be conflict and create side-effects.

So my question is: how to create Hash object/array using jquery?

Here is my function:

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

    5 Answers 5

    5

    There's a standalone hash table implementation called jshashtable (full disclosure: I wrote it). Using it, your code would be:

    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
      4

      A basic Hash can be achieved with basic JavaScript, not jQuery (I know that Prototype's Hash adds extra functionality, but you don't use it here).

      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'; }); } } 
        3

        I think you don't need jQuery for this.

        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; } } 
        0
          0

          Glancing at the jQuery documentation I'm not seeing anything that specifically for this. But you can easily do this with just a regular javascript object:

          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; } } 
            0

            There is no prototype Hash equivalent in jQuery that I know of.

            Could the following be of any use to you? using 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; } } 

              Start asking to get answers

              Find the answer to your question by asking.

              Ask question

              Explore related questions

              See similar questions with these tags.