1

我在尝试使用 $.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 方法的缩略图)正在正确返回数据对象,但另一个正在返回一个空对象。

有没有人对这个问题有想法或见解?谢谢!

4

0 回答 0