`
zhangyaochun
  • 浏览: 2595565 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

深入解读jquery的数据存储相关(data)开篇

阅读更多

 

前言

 

周六看了司徒的一篇文章,觉得这个topic不错,觉得效仿一下,深入剖析一下jQuery的data相关的实现。主要还是对页面的某些元素进行数据绑定存储相关的操作,本topic是以一个专题的形式呈现,因为会比较多个版本之间的差异和优化。

 

正文:

 

还是老规矩吧,我喜欢在研究之前先问几个问题:

 

 

  1. 哪些节点(或者说是标签)不能存储数据?
  2. 如何设计这个对应关系,一个元素多份数据的时候,多份数据多个节点的时候?
  3. 如果节点是window呢,数据存储有区别吗?
  4. jQuery每一个版本的实现是否有差异?
  5. 参数的优化,比如对应一个key,存多个value或者一个对象等
  6. 。。。。。。。。
 
呵呵,好像还挺多问题的,慢慢地我一个一个解答。
 
确切地讲,从jquery-1.2就开始有data相关的api实现!
 
//1.2版本的expando是前缀jQuery+时间戳
var expando = "jQuery" + (new Date()).getTime(),
      uuid = 0,        //uuid从0开始
      win = {};       //window绑数据都是扔到这边

//扩展jquery的api实现方式
jQuery.extend({

   cache:{},       //数据存储的集合

   /*
     @name data
     @param elem   绑定存储数据的节点对象
     @param name  数据的key
     @param data   数据
     @info 元素和数据之间挂接的关联关系:元素有一个属性expando对应id
               id是uuid自加的结果
   */
   data:function(elem,name,data){
        //判断节点是否是window
        elem = elem== window ? win : elem;
        var id = elem[expando];
        if(!id){
            //新绑定的uuid自加
            id = elem[expando] = ++ uuid;
        }

        //如果有name而且没有被cache注册数据过
        if(name && !jQuery.cache[id]){
            //cache是按照id来对应数据的
             jQuery.cache[id][name] = data;
        }

        return name ? jQuery.cache[id][name] : id;
   },
   /*
     @name removeData
     @param elem   绑定存储数据的节点对象
     @param name  数据的key
   */
   removeData:function(elem,name){
      //判断节点是否是window 
      elem = elem == window ? win : elem;
  
       var id = elem[expando];

      //删除特定name的数据
       if(name){
            if(jQuery.cache[id]){
                 delete jQuery.cache[id][name];
                 name = "";
                 for(name in jQuery.cache[id]) break;
                 if(!name){
                      jQuery.removeData(elem);
                 }
            }
       }else{
            //删除elem的绑定的所有数据
             try{
                  delete elem[expando];
             }catch(e){
                  if(elem.removeAttribute){
                     elem.removeAttribute(expando);
                  }
             }

             delete jQuery.cache[id];

       }

   }

});
 
很多人关注:咋使用?
 
<div id="out1"></div>
 
var elem = document.getElementById("out1");
//设置
$.data(elem,'name','zhangyaochun');

console.log($.data(elem,'name'));

//删除
$.removeData(elem);

console.log($.data(elem,'name'));
 
结果一次输出zhangyaochun,一次输出undefined
 
我们再看一下对应关系:
 
先看看$.cache咋存的?
 


 
 
再看看elem里面咋对应的?
 


 
 
为了不让各位视觉疲劳,下篇来讲哪个版本开始那些标签不能存储数据!!
 
 
@ 理想国际大厦  -------------- 地方换了,晚走的习惯还是没有变。。。。。。。。。。
 
 
 
 
 
2
0
分享到:
评论
1 楼 freezingsky 2012-12-17  
这篇开得相当短啊。

相关推荐

    深入学习jQuery中的data()

    2. 当我们使用 `jQuery.data()` 添加数据时,实际数据会被存储在缓存池中,而 DOM 元素或 jQuery 对象则会得到一个指向缓存池中数据位置的“门牌号”(通常是唯一的标识符)。 3. 访问这些数据时,通过“门牌号”...

    jquery的data函数

    `jQuery`的`data()`函数是JavaScript库`jQuery`中一个非常重要的功能,它用于在DOM元素上存储和检索自定义数据。这个函数允许开发者在HTML元素上附加任意的JavaScript对象,而不会污染HTML的内置属性,使得数据管理...

    jQuery技术内幕:深入解析jQuery架构设计与实现原理

    资源名称:jQuery技术内幕:深入解析jQuery架构设计与实现原理内容简介:本书首先通过“总体架构”梳理了各个模块的分类、功能和依赖关系,让大家对jQuery的工作原理有大致的印象;进而通过“构造 jQuery 对象”章节...

    jquery中data的用法案例

    在jQuery库中,`data()`方法是一个非常实用的功能,它允许我们存储和检索与DOM元素关联的数据。这个方法是jQuery扩展JavaScript原生DOM操作的重要部分,使得数据绑定变得更加方便和灵活。现在,让我们深入探讨一下`...

    jQuery技术内幕 深入解析jQuery架构设计与实现原理

    《jquery技术内幕:深入解析jquery架构设计与实现原理》由阿里巴巴资深前端开发工程师撰写,从源代码角度全面而系统地解读了jquery的17个模块的架构设计理念和内部实现原理,旨在帮助读者参透jquery中的实现技巧和...

    2014-11-15-深入理解jQuery(5)——Data1

    深入理解jQuery之Data jQuery中的Data机制是为了解决在DOM节点上绑定数据时出现的一系列问题,如数据与展示混淆、DOM结构复杂化、属性值只能是字符串等问题。Data机制的出现解决了这些问题,并提供了一种高效、安全...

    JQUERY技术内幕:深入解析QUERY架构设计与实现原理 完整版 共两个包

    深入解析jquery架构设计与实现原理》首先通过“总体架构”梳理了各个模块的分类、功能和依赖关系,让大家对jquery的工作原理有大致的印象;进而通过“构造jquery对象”章节分析了构造函数jquery()的各种用法和内部...

    jQuery读取json数据

    关于"jQuery读取json数据"这个主题,我们将会深入探讨如何利用jQuery的Ajax功能来高效地加载和解析JSON格式的数据,以及这样做带来的优势。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于...

    jQuery.data() 的实现方式

    `jQuery.data()` 是 jQuery 库中的一个核心方法,它用于在DOM元素上存储和检索数据。这个功能强大的工具使得开发者可以方便地与DOM元素关联任意的JavaScript对象或值,而无需污染HTML属性或使用全局变量。这篇博客...

    Jquery数据分页

    本文将深入探讨jQuery数据分页的原理、实现方式及其优势。 ### 1. 分页的基本概念 数据分页是指将大量数据分成若干小部分(页)进行展示,用户可以逐页浏览,而不是一次性显示所有数据。这种方式尤其适用于数据库...

    jQuery中数据缓存$.data的用法及源码完全解析.pdf

    总结来说,jQuery的`.data`方法通过数据缓存机制提供了强大且高效的数据管理能力,无论是存储DOM元素还是JavaScript对象的相关信息,都能方便地进行操作。理解这一机制有助于优化jQuery代码,提高应用性能。在实际...

    Jquery数据绑定分页源码

    本文将深入探讨“Jquery数据绑定分页源码”这一主题,这通常涉及到在网页应用中实现数据的动态加载和分页显示。 数据绑定是前端开发中的一个重要概念,它允许开发者将UI元素与数据源进行关联,当数据发生变化时,UI...

    深入浅出Jquery

    非常详细的jquery文档,其全称是锋利的jquery

    基于Jquery实现的页面数据渲染框架

    本文将深入探讨如何使用jQuery来构建一个页面数据渲染框架,并介绍相关概念和技术。 **1. jQuery基础** jQuery库简化了JavaScript的DOM操作、事件处理和动画效果。它提供了一种选择器机制,使开发者能方便地找到...

    jQuery数据列表新增或修改删除代码

    本文将详细讲解如何使用jQuery实现数据列表的新增、修改和删除功能,这对于开发动态网页和交互式用户界面至关重要。 一、jQuery数据列表的基础 1. 数据列表的HTML结构:在HTML中,我们通常使用`&lt;ul&gt;`或`&lt;ol&gt;`元素...

    jquery监控数据是否发生改变

    在"jquery监控数据是否发生改变"这个主题中,我们将深入探讨如何利用jQuery来检测和响应页面上特定数据或控件的变化。这在实现动态交互、实时验证或者保存用户输入等场景中尤其有用。 首先,jQuery提供了`change()`...

    jQuery实现动态更改table表格数据

    本教程将深入探讨如何使用jQuery实现动态更改table表格数据,让你的网页表格具有实时编辑功能,提升用户体验。 首先,我们需要理解HTML表格的基本结构。一个基本的表格由`&lt;table&gt;`元素开始,包含若干个`&lt;tr&gt;`(行)...

    jQuery源码解读

    jQuery是一个广泛使用的JavaScript库,以其简洁的API和强大的功能著称。在源码解读中,我们可以看到jQuery的设计思路和实现机制。...理解这些原理有助于我们更深入地使用和定制jQuery,提升JavaScript编程效率。

Global site tag (gtag.js) - Google Analytics