由jQuery元素组成的对象

时间:2010-03-31 12:30:45

标签: jquery object storing-data

当前代码

我已经构建了一些函数来对jQuery元素集合做一些事情:

var collection = $([]); //empty collection

我添加它们:

collection = collection.add(e);

并删除:

collection = collection.not(e);

这是非常直接的解决方案,效果很好。

问题

现在,我希望有一个由设置为任何jQuery元素的各种设置组成的对象,即:

function addObject(e){
  var o = {
    alpha: .6 //float
    base: {r: 255, g: 255, b: 255} //color object
  }

  e.data('settings', o);
}

但是当我将jQuery对象/元素传递给函数(即e)时,调用e.data不起作用,尽管它是最简单且非常好的解决方案。

问题

如果我有一个jQuery元素的“集合”,那么为集合的每个元素存储一些数据的最简单方法是什么?

4 个答案:

答案 0 :(得分:2)

如果这些“元素”是实际的DOM元素(节点),那么你不能只使用$(e).data(...)吗?

答案 1 :(得分:2)

啊,已经解决了:)

最新版本:

这是一些简化的代码:

function setData(e,key,data){
  if(typeof(e)==string){ e = $(e); }

   $(e).data(key,data);
}

溶液

问题是,我想让自己选择通过$('element')'element'$(this)添加元素,因此我必须在设置数据之前添加typeof检查 - 就像jQuery一样工作。

如果我将元素添加为选择器,则为$(e),如果我添加 jQuery对象,则为e:< / p>

function setData(e,key,data){
  if(typeof(e)==string){
    $(e).data(key,data);
  }else{
    e.data(key,data);
  }
}

所以你们都得到了投票,我会在两天内选择自己作为胜利者,所以任何偶然发现这个问题的人都会知道该怎么做(明确,经过测试,有效:])以及为什么:)

编辑:注意:这可能不是最终版本 - 我已阅读更多文档,因此此setData函数支持jQuery.add支持的所有类型。

答案 2 :(得分:1)

我认为问题是当你以这种方式处理一个集合并且你添加一个项目...如果它还没有被jquery包裹但它不会。因此,当再次访问时,它只是原始元素。

如果我在这个思路中是正确的,e实际上是一个dom元素/节点(或其字符串表示),那么一个简单的$(e)应该可以让你访问它的data方法

function addObject(e){
  var o = {
    alpha: .6 //float
    base: {r: 255, g: 255, b: 255} //color object
  }

  $(e).data('settings', o);
}

答案 3 :(得分:1)

是不是因为你错过了两个属性之间的逗号?

  var o = {
    alpha: .6 <-- here 
    base: {r: 255, g: 255, b: 255} 
  }

(我对此表示怀疑,但觉得有必要指出它)

这有效,而且有点整洁(至少IMO):

    $.fn.addObject = function(){
        var o = {
            alpha: .6, //float
            base: {r: 255, g: 255, b: 255} //color object
        }
         $(this).data('settings', o);
    };

    // simple test
    $("div").addObject();
    alert($("div").data("settings").alpha); // alerts 0.6