jQuery在去除缓存数据的一个失误
来源:Ruby's Louvre 发布时间:2009-12-14 20:40:00
如果独自放着jQuery做事,它绝对做得很好,但jQuery充许与其他库共存在,有些事就防不胜防了。看下面代码
data :function (elem, name,data){
//略
},
removeData: function (elem, name) {
elem = elem == window ? windowData : elem;
var id = elem[expando];
// If we want to remove a specific section of the element's data
if (name) {
if (jQuery.cache[id]) {
//★★★★★★★
// Remove the section of cache data
delete jQuery.cache[id][name];
// If we've removed all the data, remove the element's cache
name = "";
for (name in jQuery.cache[id])
break;
if (!name) jQuery.removeData(elem);
//★★★★★★★
}
// Otherwise, we want to remove all of the element's data
} else {
// Clean up the element expando
try {
delete elem[expando];
} catch(e) {
// IE has trouble directly removing the expando
// but it's ok with using removeAttribute
if (elem.removeAttribute) elem.removeAttribute(expando);
}
// Completely remove the data cache
delete jQuery.cache[id];
}
},
留意星号包围的区域,John Resig的想法是,如果把元素节点的对应的缓存体的键值对全部移除后,就把此缓存体从cache中去掉。举个通俗的例子,cache就是一家银行,页面上的元素节点(elem)就是一个个人,每个人可以通过data方法在银行里开个帐户(id),而存折就是elem的那个expando属性,这个帐户可以做存许多东西,每样东西都分开管理的,如果帐户里面的东西都取光就会自动注销这个帐户。嗯,本来就应该这样,没用的东西就应该收CG回收掉,节省内存。
下面是一个仿制品
但如果jQuery与一些在Object原型进行了扩展的库共库呢?假设在它里面添加了个aa属性……
这时就无法清除缓存体了,遇到这篇文章提到的问题《Google Closure: 糟糕的JavaScript》,真是百密一疏!这也很好的教训了我们不要对Object.prototype这个最基本的东西做扩展,Prototype最近的版本也对此做了修正。那么如何排除干扰呢?


猜你喜欢
- sql server 数据库,sa用户被锁定1、打开数据库——用Windows身份登录数据库2、登录名——双击sa(打开属性)3、常规——设
- <?php/** * 发送文件 * * @author: legend(legendsky@hotmai
- 搭建FTP,或者是搭建网络文件系统,这些方法都能够实现Linux的目录共享。但是FTP和网络文件系统的功能都过于强大,因此它们都有一些不够方
- Microsoft SQL Server 2000 能提供超大型系统所需的数据库服务。大型服务器可能有成千上万的用户同时连接到 SQL Se
- 创建小程序全局函数1:在微信开发工具中增加一个JS文档, 放入全局全局函数代码说明1:全局函数只能放var定义的变量下,本例的var 变量为
- 创作思路:主要还是想尝试做点稍微不同于整天为迎合客户而做的东西.然后闲时就开始构思,比如坐车,走路什么的.看到有一些复古手机的相关图,就想到
- access中可以将文本中的数据轻松导入表中,mysql中用起来没那么方便,其实起来也很简单。首先将数据记录按行处理好用特定的字符分开如:“
- 先前我们讲的都是“线性结构”,他的特征就是“一个节点最多有一个”前驱“和一个”后继“。那么我们今天讲的树会是怎样的呢?我们可以对”线性结构“
- 概要:要实现点赞功能,需要实现的有:谁进行的点赞、什么时候进行点赞、点赞的对象是谁、每一个对象的点赞数量是多少、点赞过后还需要能够取消点赞,
- 本文实例为大家分享了tensorflow如何批量读取图片的具体代码,供大家参考,具体内容如下代码:import tensorflow as
- 一、概述Oracle Data Provider for .NET, Managed Driver:Oracle官方的托管数据库
- 详解Python中的三元运算什么是三元运算符在大部分编程语言中都有三目运算,也称三元运算,Python语言从Python2.5版本开始也引入
- 进程、线程和协程进程的定义:进程,是计算机中已运行程序的实体。程序本身只是指令、数据及其组织形式的描述,进程才是程序的真正运行实例。线程的定
- 上篇文章给大家介绍过解决Navicat for Mysql连接报错1251的问题(连接失败),今天介绍Navicat for MySQL 连
- 本文实例讲述了python实现与redis交互操作。分享给大家供大家参考,具体如下:相关内容:redis模块的使用设置值获取值安装模块导入模
- AdobeAdobe公司的标识1982年,40多岁的程序员约翰·沃诺克(John Warnock)和查尔斯·杰斯克(Charles Gesc
- 代码演示如下:方法一<?php function encryptDecrypt($key, $string, $decrypt){
- package com.groundhog.codingmouse; import java.sql.Connection; import
- 本文实例讲述了php下pdo的mysql事务处理用法。分享给大家供大家参考。具体分析如下:php+mysql事务处理的几个步骤:1.关闭自动
- 在对MySQL数据库进行迁移的时候,有时候也需要迁移源数据库内的用户与权限。对于这个迁移我们可以从mysql.user表来获取用户的相关权限