如何将数据关联到jQuery对象?

时间:2011-10-16 11:15:52

标签: jquery

我有一个包含元素$myObject的jQuery对象el_1, el_2, ..., el_n。做

$myObject.data('foo', 'bar');

会将值'bar'分配给每个元素foo的数据属性el_1, el_2, ..., el_n。相反,我想将数据作为单个实体与jQuery对象$myObject 相关联。

我想我能做到

$myObject['foo'] = 'bar';

但这可能会导致与jQuery对象的其他属性和方法发生冲突。是否有一种“jQuery安全方式”将数据与jQuery对象相关联?

2 个答案:

答案 0 :(得分:2)

最好的办法是将其包装在容器对象中。

containerObj = {jquery: $myObject, data: ['data']};

答案 1 :(得分:2)

您可以使用jQuery对象引用作为键将该数据存储在您自己的对象中,然后将该对象存储在文档的数据中。类似的东西:

$.fn.objData = function(key, value) {
    var rootData = $(document).data("jQueryObjectData");
    if (!rootData) {
        $(document).data("jQueryObjectData", rootData = {});
    }
    var objData = rootData[this];
    if (!objData) {
        rootData[this] = objData = {};
    }
    if (typeof value === "undefined") {
        return objData[key];
    }
    objData[key] = value;
    return this;
};

然后您可以按预期使用该方法:

$myObject.objData("foo", "bar");

后来:

var foo = $myObject.objData("foo");

当然,$myObject必须引用两个调用中的同一个对象,因为包含相同元素的两个不同的jQuery对象仍将被视为不同的键。

这种方法的一个潜在问题是根数据对象将保持对用作键的jQuery对象的引用,从而防止垃圾收集器处理它们。根据您创建的jQuery对象的数量以及使用该方法的方式,它可能会成为一个问题。