我在尝试使用 $.data 附加和检索数据时遇到了一个奇怪的问题。我认为这可能是一个上下文问题,但不知道如何解决这个问题,也不知道到底发生了什么?
我有一组拇指,每个都应该有自己的数据与之相关联。当脚本被调用时,它会触发所有插件的默认设置,这是正常的事情,然后从每个缩略图的父 ('a') 标记中提取所有数据插件设置并将其合并。最后,我将整套合并的插件设置分配给缩略图的 $.data,最后分配一个点击事件给它。
return this.each(function(index){
var $this=$(this),
objSRC=$this.parents('a:first'),
dataSettings=(!objSRC.data("plugin"))?{}:JSON.parse(objSRC.attr('data-plugin')),
mergedData=$.extend({}, Plugin.settings,dataSettings||{});
$.data($this, mergedData);
// SETUP THUMBNAIL CLICK EVENT
$this.on('click',function(e){
Plugin.thumbClick($this);
e.stopPropagation(); e.preventDefault();
});
});
....然后在实际的缩略图单击事件方法中,我遇到了问题:
thumbClick:function(obj){
var objData=$.data(obj),
objParent=obj.parents('a:first'),
GalAttr=obj[0].getAttribute('rel'),
imageATTR=this.alt;
// SETUP GALLERIES IN ARRAY INSIDE DATA - ONCE
if((typeof(GalAttr)!='undefined' && GalAttr) && !obj[0]['Galleries']){
var GallerySet=$("[rel='"+GalAttr+"']");
for(var i=0,l=GallerySet.length; i<l; ++i){
GallerySet[i]['Galleries']=GallerySet;
};
};
},
在该方法中,我设置了一些基本变量,然后使用缩略图的 rel 属性。rel 属性用于将缩略图分组到画廊中。所以,点击缩略图后,我试图
1)从缩略图(obj)中拉取REL属性
2)找到页面上所有具有相同rel属性的相似缩略图(一次)
3) 将返回的集合作为数组保存到缩略图的数据中
这样,我只需要在每个图库中基于 'rel' 搜索 DOM 一次。之后,所有内容都将存储在缩略图 $.data 中的“Galleries”数组中。一切看起来都正确并且正在工作,但我遇到了 1 个问题 - $.data 在传递给函数的缩略图(obj)与我搜索并添加到画廊的缩略图(obj)之间没有正确对齐大批。
基本上如果我 console.log(obj) 和 console.log($(GallerySet[0]))
单击图库中的第一张图片时,我得到完全相同的元素。(两者都是对象)但是,当我尝试从每个对象中提取数据时:
console.log($.data(obj) 和 console.log($.data($(GallerySet[0]))
他们完全不同。$.data(obj) (这是单击并传递给 thumbClick 方法的缩略图)正在正确返回数据对象,但另一个正在返回一个空对象。
有没有人对这个问题有想法或见解?谢谢!