qwe*_*ymk 29 javascript jquery jquery-data
jQuery在哪里存储data()它为DOM对象设置的值?
是否存在某种类似的变量jQuery.dataDb,甚至是私有的?
有没有办法获得对这个对象的访问权限?
Kus*_*alP 32
在内部,jQuery创建一个名为的空对象$.cache,用于存储通过data方法设置的值.您向其添加数据的每个DOM元素都会分配一个唯一的ID,该ID用作$.cache对象中的键.
jQuery以3种不同的方式为3种不同类型的对象获取或设置数据.
对于DOM元素,jQuery首先获得一个唯一的id,而不是为名为expando的元素创建一个自定义属性:
var counter = 0;
function uid() {
// only example
return 'jQuery' + counter;
}
function getExpando(element) {
var expando = element['jQueryExpando'];
// for those without expando, create one
if (!expando) {
expando = element['jQueryExpando'] = uid();
}
return expando;
}
Run Code Online (Sandbox Code Playgroud)
另一方面,jQuery有一个$ .cache对象,它存储每个元素的数据映射,jQuery通过expando搜索$ .cache并获取某个元素的数据映射,获取或设置该映射中的数据:
function data(element, name, value) {
var expando = getExpando(element);
var map = $.cache[expando];
// get data
if (value === undefined) {
return map && map[name];
}
// set data
else {
// for those without any data, create a pure map
if (!map) {
map = $.cache[expando] = {};
}
map[name] = value;
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
对于自定义对象(不是DOM元素或窗口对象),jQuery直接通过名称设置或从该对象获取属性:
function data(obj, name, value) {
if (!obj) {
return obj;
}
// get data
if (value === undefined) {
return obj[name];
}
// set data
else {
obj[name] = value;
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
最后,对于特殊的窗口对象,jQuery 在闭包中有一个特殊的windowData变量来存储窗口的数据:
function data(obj, name, value) {
if ($.isWindow(obj)) {
obj = windowData;
}
// same as data for custom object
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8583 次 |
| 最近记录: |