我有一个jQuery对象$myObject,其中包含元素el_1,el_2,…,el_n.干
$myObject.data('foo','bar');
将值’bar’分配给每个元素el_1,el_n的数据属性foo.相反,我想将数据作为单个实体与jQuery对象$myObject相关联.
我想我能做到
$myObject['foo'] = 'bar';
但这可能会导致与jQuery对象的其他属性和方法发生冲突.是否有一种“jQuery安全方式”将数据与jQuery对象相关联?
最佳答案
您可以使用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对象的数量以及您使用该方法的方式.