Как создать Hash объект / массив, используя jquery?
Я знаю, что в структуре прототипа Javascript есть объект Hash(), но есть ли в Jquery что-нибудь подобное?
Поскольку я хотел бы придерживаться одного фреймворка javascript, а не смешивать работу с фреймом прототипа и фреймворк JQuery и использовать его одновременно, я опасаюсь, что возникнет конфликт и возникнут побочные эффекты.
Итак, мой вопрос: как создать объект / массив Hash, используя jquery?
Вот моя функция:
/* 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 ответов
Существует отдельная реализация хеш-таблицы, называемая 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);
}
}
Основной Hash
может быть достигнуто с помощью базового JavaScript, а не jQuery (я знаю, что хэш Prototype добавляет дополнительные функциональные возможности, но вы не используете его здесь).
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';
});
}
}
Я думаю, вам не нужен 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;
}
}
Взглянув на документацию по 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;
}
}
Я не знаю прототипа хеш-эквивалента в 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;
}
}