这两天翻了jq的源码,今天看到了jq关于数据存储的几个方法,遂总结一下,和小伙伴没分享一下,哪里说的不对,还望批评指正~~~

废话不多说,直接上代码:

 $(function(){
$('#div1').attr('name','one');
console.log($('#div1').attr('name'));//one
$('#div1').prop('name','one');
console.log($('#div1').attr('name'));//one
$('#div1').data('name','one');
console.log($('#div1').attr('name'));//one
})

我们看到attr ,prop, data都可以起到存储数据的作用,那么他们有什么区别呢?

1,首先来看attr ,在jquery源码中attr这个方法是用setAttribute,和getAttribute实现的

document.getElementById('div1').setAttribute('name','one');
console.log(document.getElementById('div1').getAttribute('name')); //one

2,再来看prop,可以看到是通过点或[]操作符实现的

document.getElementById('div1').name = 'one'; //或者
document.getElementById('div1')['name'] = 'one';
console.log(document.getElementById('div1').name); //one

3,上面的两种方法比较适合设置一些属性,或者存储一些数据量不大数据,比如简单的字符串或者简单的数字,但都不适合存储大量的数据,比如一个大的json,或者大的数组,这是为什么呢???

这就得说到js的内存泄漏!!!

什么?什么?你不知道什么是内存泄漏?

好吧,我就献丑了,就当是抛砖引玉了,翻看网上的很多资料都讲的晦涩难懂,对新入手的小白很不友好,我就按照我自己理解的来说,希望能用最通俗直白的话,能让你多少理解一点(大牛跳过);

js这们语言,有个特点,js中没用的变量(即没有被引用)会被垃圾回收机制所销毁掉,这时变量就不存在了,内存就会释放,也就减小内存的开销,但是js中的一些操作是会引起内存泄漏的,所谓的内存泄漏在我看来就是,变量一直存在引用关系,导致变量无法被垃圾回收机制所回收,内存无法释放,计算机的性能就会低,从而引起卡顿现象,比如DOM元素和对象之间的相互引用就会引起内存泄漏

var oDiv = document.getElementById('div1');
var json = {};
oDiv.name = json;
json.aaa = oDiv;

如上代码,就是DOM元素引用了对象,对象也引用了DOM元素

var json = {a:1,b:2,c:3};
$('#div1').attr(name,json);

看了上面的代码,小伙伴们就应该知道了为什么不能用attr和prop了吧

============================================================================================================================

而data,他是可以存储任何数据的,包括json,并且不会引起内存泄漏,那么他是如何做到的呢?

其实再jq源码中使用了一个映射的关系,进行实现的,它并没有直接的将对象挂载到元素的属性上,而只是在元素上加了一个自定义属性,自定义属性的值是一个唯一的id,真正的数据是存储在一个对象上的,这个对象存储的所有的数据,我暂且叫它为cache,且每一个数据都有一个唯一的id,与元素身上自定义的属性的id是对应的,cache在中间起了一个中介的作用,巧妙的联系在了一起,避免了内存泄漏。

支持原创从我做起!!!

jquery中prop,attr,data的区别的更多相关文章

  1. jQuery中prop() , attr() ,css() 的区别

    1.  HTML属性是指页面标记中放在引号中的值,而DOM属性则是指通过JavaScript能够存取的值. (1)在jQuery中,prop()是操作DOM属性,attr()是操作HTML属性. HT ...

  2. jQuery中 prop() attr()使用详解

    对于HTML元素本身就带有的固有属性,在处理时,使用prop方法.  对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法. 在高版本的jquery引入prop方法后,什么时候该用p ...

  3. jquery中prop和attr的区别

    jquery中prop和attr的区别 prop: prop(name|properties|key,value|fn) **概述** 获取在匹配的元素集中的第一个元素的属性值. 随着一些内置属性的D ...

  4. jquery中prop()方法和attr()方法

    接着上一篇笔记的疑惑,找了下prop()方法和attr()方法的区别. 原来query1.6中新加了一个方法prop(),一直没用过它,官方解释只有一句话:获取在匹配的元素集中的第一个元素的属性值. ...

  5. 【jQuery】【转】jQuery中的trigger和triggerHandler区别

    trigger(event, [data]) 在每一个匹配的元素上触发某类事件. 这个函数也会导致浏览器同名的默认行为的执行.比如,如果用trigger()触发一个'submit',则同样会导致浏览器 ...

  6. jquery中this与$this的区别

    来源:http://www.jb51.net/article/19738.htm jQuery中this与$(this)的区别 $("#textbox").hover( funct ...

  7. jQuery中this与$(this)的区别

    起初以为this和$(this)就是一模子刻出来.但是我在阅读时,和coding时发现,总不是一回事,这里就谈谈this与$(this)的区别. jQuery中this与$(this)的区别 $(&q ...

  8. jQuery中this与$(this)的区别总结

    这里就谈谈this与$(this)的区别. 1.jQuery中this与$(this)的区别 $("#textbox").hover( function() { this.titl ...

  9. JQuery中的html(),text(),val()区别

    jQuery中.html()用为读取和修改元素的HTML标签,.text()用来读取或修改元素的纯文本内容,.val()用来读取或修改表单元素的value值. 1.HTML html():取得第一个匹 ...

  10. Jquery中的 height(), innerHeight() outerHeight()区别

    jQuery中的 height innerHeight outerHeight区别 标准浏览器下: height:高度 innerHeight:高度+补白 outerHeight:高度+补白+边框,参 ...

随机推荐

  1. XDomainRequest IE8&IE9 cors 跨域通讯的处理方法

       版权声明:避免百度一下通片同一篇文章,未经博主允许不得转载.本博客作为笔记使用,正确性请自行验证. https://blog.csdn.net/u014071104/article/detail ...

  2. Java基础---Java方法

    基本方法的定义: public static void 方法名称() { 方法体 } 方法名称的命名规则和变量一样,使用小驼峰. 方法体:也就是大括号当中可以包含任意条语句. 注意事项: 1. 方法定 ...

  3. 将 PDF 论文的公式截图后转成 Word 可编辑公式(23)

    1. 问题 如何将PDF论文的公式截图后直接转成Word可编辑的公式? 2. 方法步骤 1.下载mathpix 2.使用mathpix截取公式,并生成LATEX 公式: 3.下载LaTeX转Word插 ...

  4. jQuery笔记归纳

      使用jQuery前首先需要导如jQuery包:https://jquery.com/(点击下载按钮,进入后点击鼠标右键另存为即可下载)    例如:<script type="te ...

  5. LC 417. Linked List Cycle II

    题目描述 Given a linked list, return the node where the cycle begins. If there is no cycle, return null. ...

  6. ESP32 - 乐鑫官方Flash烧录工具使用

    第一步:打开软件flash_download_tools_v3.6.6.exe 第二步:点击ESP32 DownloadTool,启动我们板子的烧录工具 第三步:按照下图顺序,加载bin_prog目录 ...

  7. docker&k8s-配置/常用命令

      kubectl delete deployment,ingress,svc demo-mml-jp-ylmopt-web-1 -n demo-mml  #删除预生产环境mml组ylmopt-web ...

  8. S03_CH13_ZYNQ A9 TCP UART双核AMP例程

    S03_CH13_ZYNQ A9 TCP UART双核AMP例程 13.1概述 ZYNQ中存在两个独立的ARM核,在很多应用场景中往往只需使用其中的1个核心即可.然而,对于复杂的设计,例如多任务,并行 ...

  9. SAS学习笔记33 格式修饰符

    冒号(:)格式修饰符 从非空格开始读取变量所对应的数据,直到满足以下任何一种情况 遇到下一个空格列 对应变量所定义的长度已经读满 数据行结束 &格式修饰符 修饰所读取为字符型的列数据中含有一个 ...

  10. SAS学习笔记31 SAS随机分组方法及实现

    随机分组方法包括: 简单随机化(simple randomization) 区组随机化(block randomization) 分层随机化(stratified randomization) 分层区 ...