我有一个包含元素$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对象相关联?
答案 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对象的数量以及使用该方法的方式,它可能会成为一个问题。