zoukankan      html  css  js  c++  java
  • Jquery数据缓存

    参考:https://blog.csdn.net/aitangyong/article/details/50323561

    http://www.cnblogs.com/dolphinX/p/3348582.html

    $.data的使用

      通过这个API,可以在这个对象上附加一些属性以及读取属性。

        var el = document.getElementById('content');  
        $.data(el, 'name', 'aty');  
        console.log($.data(el, 'name')); // aty  

      对于要操作的对象,分成两类:DOM对象和其他JS对象。

      在JQ初始化时,会生成一个随机的字符串expando,生成方式如下:

    expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /D/g, "" )

    操作DOM对象

      附加的数据不直接添加到DOM对象上,因为对于IE9之前的浏览器,在移除DOM对象后,无法释放直接附加到DOM对象上的自定义对象。

      附加的数据存放在$.cache对象中。在DOM对象上建立一个键值对:expando->自增的uuid,$.cache[dom对应的uuid]->{ data:对应dom的数据对象}

    var dom = document.getElementById("a");  
    $.data(dom, 'name', 'aty');  
    console.log(dom[jQuery.expando]); // 1  
    console.log(jQuery.cache); // {1 : {data:{name:'aty'}}}  

    操作其他JS对象

      和以上操作DOM不同,操作其他JS对象时(包括JQ对象:$(dom)),会直接在这个对象上创建 obj[expando]->{ data:附加的数据对象}

    var hisObj = {};  
    $.data(hisObj, 'name', 'him');  
    console.log(hisObj[jQuery.expando].data.name);//him  

    attr和prop的区别

      对于DOM对象,获取和设置数据有两种方式

    • property:如xx.id,或者可以自定义属性,如 
      t.customizedProp='customized prop';
    • attribute:dom.getAttribute(name) / dom.setAttribute(name,value),这种方式设置的值显示到dom节点上:
    var t=document.getElementById('test');
    t.setAttribute('class','active');
    t.setAttribute('customizedAttr','customized');
    
    // <div id="test" class="active" customizedattr="customized">123</div>

       这两种方式操作的数据存在一定的交集,不管通过哪种方式修改,都会互相影响:

    t.id='test1';
    console.log(t.getAttribute('id'));//test1

      在这个交集中,并不是所有的key都是一致的,如t.className对应t.getAttribute("class")。可以看出,以上这两种方式存取值容易导致混乱。

      在jQuery1.6之前,.attr()方法在获取一些attributes的时候使用了property值,这样会导致一些不一致的行为。

      在jQuery1.6中,.prop()方法仅提供获取property值的方式,而.attr()方法仅返回attributes。

  • 相关阅读:
    将帅问题
    堆栈(链栈)
    堆栈(基础实现原理 顺序栈)
    双向链表
    冒泡排序 (泛型版)
    maven
    jboss数据源配置
    仓库介绍,nexus的安装
    mave聚合继承
    mac mysql 安装
  • 原文地址:https://www.cnblogs.com/hellohello/p/9044281.html
Copyright © 2011-2022 走看看