如何使用jquery创建Hash对象/数组?

时间:2010-06-09 14:56:08

标签: javascript jquery hash prototypejs

我知道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);
    }
}

5 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:4)

基本的JavaScript可以实现基本的Hash,而不是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';
        });        
    }
}

答案 2 :(得分: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;
    }
}

答案 3 :(得分: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 :(得分:0)

我知道jQuery中没有等效的原型Hash。

以下内容对你有用吗? 使用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;
    }
}