【问题标题】:How to create Hash object/array using jquery?如何使用 jquery 创建哈希对象/数组?
【发布时间】:2011-03-01 17:20:26
【问题描述】:

我知道 Javascript 原型框架中有一个 Hash() 对象,但是 Jquery 中有这样的东西吗?

由于我想坚持使用一个 javascript 框架,而不是将 Prototype Frame 工作和 JQuery 框架混合并同时使用,因为我担心会产生冲突并产生副作用。

所以我的问题是:如何使用 jquery 创建 Hash 对象/数组?

这是我的功能:

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

【问题讨论】:

    标签: javascript jquery hash prototypejs


    【解决方案1】:

    有一个名为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);
        }
    }
    

    【讨论】:

    • 谢谢,它小巧实用!
    【解决方案2】:

    一个基本的Hash 可以用基本的JavaScript 来实现,而不是jQuery(我知道Prototype 的Hash 增加了额外的功能,但你在这里不用它)。

    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】:

      我认为你不需要 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;
          }
      }
      

      【讨论】:

        【解决方案4】:

        浏览 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;
            }
        }
        

        【讨论】:

          【解决方案5】:

          据我所知,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;
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2019-04-08
            • 2020-11-23
            • 2019-11-16
            • 2011-04-20
            • 2016-10-02
            • 1970-01-01
            • 2015-01-27
            • 1970-01-01
            • 2012-06-17
            相关资源
            最近更新 更多