位置: 编程技术 - 正文

深入学习jQuery中的data()(jquery从入门到精通)

编辑:rootadmin

推荐整理分享深入学习jQuery中的data()(jquery从入门到精通),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:jquery基础教程,learning jquery,jquery从入门到精通,jquery基础教程详解,learning jquery,jquery基础教程详解,jquery教程csdn,jquery教程csdn,内容如对您有帮助,希望把文章链接给更多的朋友!

data有什么作用?

在我们平时js编码过程中,我们经常会向DOM元素中添加各种自定义属性,这样有一个弊端。

  1、假设我们在DOM元素中添加了一个属性,这个属性指向了某个js对象。 dom1.ele = jsObj

  2、当这个js对象发挥完作用后,我们已经用不到他了。这时候按理说应该把这个js变量清空,释放内存。大家都知道,如果一个js对象不存在任何外在引用的话,解释器会自动将其在内存中删除,这也是javascript相对于c++等手动管理内存的程序的优点。

  3、但是这时候问题来了,因为DOM元素引用了这个js对象,尽管这个js对象已经没有存在的意义了,但是解释器是不会把他删除的。如果想要把其删除,我们可能需要将DOM元素的这个属性设置为null。

  4、我们编写了这么多的代码,哪里能把 每个js对象是不是被DOM元素引用了都记住啊?

  5、而且,假如DOM元素与js对象之间相互循环引用,根本就无法删除! 这就是内存泄漏

  6、所以,为了避免这种情况的发生,我们要尽量避免 引用数据(这里的引用数据可以说是javascript对象) 直接依附在DOM对象上。

  7、data就是用来搞定以上问题的方法。

data是如何搞定以上问题的?

首先来说一说jQuery中Data实现的大体思路:

  1、首先我们创建一个数据缓存池,这个缓存池专门用来存储 向 DOM对象或者jQuery对象附加的额外数据。

  2、当我们要向DOM对象或者jQuery对象附加额外数据的时候,我们附加的数据其实是保存于这个缓存池中

  3、DOM对象或者jQuery对象生成一个额外属性,这个属性保存了 附加数据在缓存池中的‘门牌号'(位置或者索引)

  4、当我们访问DOM对象或者jQuery对象的附加数据时,实际上是先取得其附加数据的门牌号,然后找到缓存池中对应门牌号的数据,进行操作。

大体思路讲完,那么来分析一下具体思路:

在jQuery中,有一个Data构造函数,每当运行这个构造函数时,就会生成一个实例。

jQuery默认会自动生成两个Data实例:

深入学习jQuery中的data()(jquery从入门到精通)

  var dataPriv = new Data() jQuery私有的,我们尽量不要对这个实例进行操作。

  var dataUser = new Data() 这个就是服务于用户了,我们使用data()方法都是对这个实例进行操作。

所有的Data实例都有以下属性:

  expando: 值为字符串类型,每个Data实例的expando属性的值都不相同,用来区分不同的Data实例,类似于id的作用,expando的值就是上文中的额外属性。

  uid: 这就是上文中的门牌号,初始为1,随着不同对象的附加数据的加入,自增长。

  cache : 一个对象 {} ,这就是缓存池了。

来个实例:

body对象有一个名为jquer......的额外属性,

  这个属性的名称就是dataUser的expando的值

  这个属性的值就是门牌号。

总结: data实际上就是对js对象或者DOM对象的额外属性做了一个集中的管理。对于那些不会产生内存泄漏的额外数据,我们也可以直接向js对象或者DOM对象附加。

好,理清楚上面的关系后,我们再来看一下源码:

可能会有同学问道:如果我想对dataPriv进行操作该如何?

请看源码:

通过源码,我们可以看出:

jQuery.data() jQuery.remove()都是对dataUser进行操作,而jQuery._data() jQuery._remove()都是对dataPriv进行操作。

理解jQuery.data(ele,name,data) 与 jQuery().data(key,value)的不同。

  通过上面的源码,我们可以看到jQuery.data(ele,name,data)是对ele元素附加数据。

  而jQuery().data(key,value)则会为jQuery对象中的所有DOM对象分别附加数据

来看源码(删减了部分):

上文中的所有源码:为jQuery.1.

总结

标签: jquery从入门到精通

本文链接地址:https://www.jiuchutong.com/biancheng/373967.html 转载请保留说明!

上一篇:解决拦截器对ajax请求的拦截实例详解(拦截器 aop)

下一篇:jQuery插件DataTable使用方法详解(.Net平台)(jQuery插件能输出到控制台)

  • 企业季度所得税申报表怎么填写
  • 商品批发企业进项税额会计分录
  • 个体工商户的纳税人类型怎么选
  • 个人所得税抵扣项目有哪些及金额
  • 企业代扣代缴个人所得税
  • 即征即退进项税额为哪些
  • 百旺金赋的服务费必须交吗
  • 开票税金和实际交的税金差额怎么办
  • 如何查看增值税申报表
  • 社保缴费基数什么意思
  • 装载机折旧年限是几年
  • 罚款收据与通用的区别
  • 固定资产成本包括包装费吗
  • 销售使用过未抵扣进项税额的货运汽车
  • 研发费用加计扣除行业
  • 行政事业单位核算短期投资时有关预算会计核算正确的是
  • 库存商品变价出现原因
  • 其他扣款税后应该怎么做账?
  • 转让名额协议
  • 材料检测费怎么计算
  • 母公司派遣员工到子公司解散补偿金
  • 今年补缴去年的税汇算清缴吗
  • 广东省电子税务局app下载
  • 增值税发票收款人复核人空白可以吗
  • 个人可以去税务局开票吗?
  • 技术转让免征增值税
  • 本期认证本期不抵扣下月再抵扣
  • 自产产品公益性捐赠可以免征增值税吗
  • 核定征收的企业不能弥补亏损
  • 加工贸易企业如何财务管理账务流程
  • 增值税发票自查报告
  • 企业应纳税所得额计算公式
  • 弥补亏损的会计分录是怎样的
  • php中面向对象
  • php ftp功能
  • 企业清算所得税如何计算
  • 流转税的计税依据有哪些
  • 资本化的后续支出包括哪些项目
  • 最贵的游戏宣传片
  • 试用期不交金后面补缴
  • 如何修改php网页内容
  • Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
  • 本月损益类未结转为零的一级科目
  • 【K210】K210学习笔记七——使用K210拍摄照片并在MaixHub上进行训练
  • 城建税5%的是什么情况
  • phpcms怎么修改模板风格
  • 持有期间公允价值变动的科目归属
  • 缴纳残保金的计税依据是什么
  • 欠别人钱可以用车抵押吗
  • 职工探亲如何报差旅费
  • 制造费用转入什么
  • 施工现场补助规定
  • 工会经费申报的依据
  • 投资性房地产对外出租的账务处理
  • 固定资产折旧如何影响利润
  • 对公账户给别人走账
  • 受托加工物资如何开票
  • 资产减值损失科目借方增加还是减少
  • 购买产品样品计入什么科目
  • 月末结转的各类凭证无需注意先后顺序
  • 公司试驾车怎么开票
  • 发生的费用
  • 上一年度企业所得税汇算清缴会计分录
  • 公司不做账不报税有什么后果?
  • 收到融资租赁发票要交印花税吗
  • mysql导入数据语句
  • sqlserver多行转多列
  • sql中的视图提高了数据库的
  • ie10和ie11
  • 360对win7支持多久
  • Linux利用sftp命令传输文件(极少数人知道的方法)
  • win10周年版
  • win10笔记本键盘失灵按什么键恢复
  • javascript的核心语言对象包括
  • 如何批量删除列表
  • js实现文字闪烁的方法
  • 微博评论系统
  • 郑州地铁客服热线电话
  • 广西电子税务局电话人工客服电话
  • 杭州金税盘客服电话是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设