jQuery中.attr和.data的区别分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jQuery中.attr和.data的区别分析相关的知识,希望对你有一定的参考价值。

attr方法可以用来获取JQuery对象的属性值,例如获取对象jq的name属性值:var v= jq.attr("name");
attr方法也可以用来设置属性值,例如:jq.attr("name", "test");作用是把对象jq对应的html元素的name属性值设置为test。
data方法用来获取JQuery对象上缓存的数据或者在JQuery对象上缓存数据,缓存的数据都是以key-value(键值对)形式保存。例如:
var d = jq.data("mydata");可以在JQuery对象jq上获取key为mydata的缓存数据。
jq.data("mk", "mv");可以在JQuery对象jq上缓存数据,键是mk,值是字符串“mv”。
data可以缓存任何JS对象,例如字符串、数组、json等等。
需要注意的是,key(键)中的字母只能用小写。
参考技术A http://www.cnblogs.com/yaomeng/p/5359894.html
看参考这个文档讲述了prop,attr,data

jquery data方法取值与js attr取值的区别

 

jquery data方法的运行机制: 第一次查找dom,使用attributes获取到dom节点值,并将其值存到缓存里,第二次操作的时候,还是先找到dom,但是这次取值是直接从缓存读了,少了一步对dom的操作

 

attr()方法每次都要操作dom,性能上差点儿

 

$(‘a‘).data(‘v‘)取到的值是页面初次加载的缓存值,以后如何更改,在页面上都不会改变,但缓存值会变,可以传给i/o请求使用

 

document.getElementsByTagName(‘a‘).attr(‘data-v‘),如果页面响应事件ain改变了该值,其页面展示值也会改变,因为是一直操作的dom,性能上低于前者

 

 

以下是盗图原文

代码展示地https://github.com/jquery/jquery/blob/master/src/data.js#L77-L165

 

其实是这样的,当我们执行例如这样的语句时 $("#id").data("test"); (简化后的过程) 
第一步: jQuery 会获取到 $("#id") 元素,对吧、 
第二步: 执行到 data方法 的时候,他会通过 attributes 取我们要的对应值。 
第三步: 返回结果给我们,然后 jQuery 把值缓存到内部对象里 
第一次取的时候,我们可以得到的 undefined,字符串,数字或者解析后的json。 
 
那有人会说这个和 attr 有什么区别呢? 
当我们第二次执行 $("#id").data("test"); 的时候: 
第一步: jQuery 会获取到 $("#id") 元素,和上面一样。 
第二步: 执行到 data方法 的时候,从 jQuery 的缓存中取值 
第三步: 返回结果给我们 
 
发现第二步不同了,对吧,为什么不是从 attributes 取值,而是从缓存中取呢? 
缓存其实是js的对象,简单说就类似 var cache = {}; jQuery 在第一次取值之后就会保存到这个缓存对象中,这样我们再次操作的时候就非常快了、 
往往性能的损耗都是在 dom 操作上,所以避免重复操作 dom 是非常必要的。 
 
到这,也能看出他和 attr 最大的区别了,比如 
 
$("#id").data("test", "123"); 执行后依然是 data-test="hehe" $("#id").attr("data-test", "123"); 执行后会是 data-test="123" 那么我们要给一个元素赋值值,或者对象的时候他们有什么区别呢?比如
 
$("#id").data("test", {str: "hehe"}); 会把 {str: "hehe"} 赋值给 缓存,元素节点上依然是 data-test="hehe" $("#id").attr("data-test", {str: "hehe"}); 执行后会是 data-test="[object Object]" 这个应该也有不少人遇到,至少群里有不少人问过这个问题。

以上是关于jQuery中.attr和.data的区别分析的主要内容,如果未能解决你的问题,请参考以下文章

jQuery中attr()prop()data()用法及区别

总结Jquery中获取自定义属性使用.attr()和.data()以及.prop()的区别

jquery data方法取值与js attr取值的区别

jquery中attr和prop的区别

jQuery 的attr()与css()的区别

JQuery的attr 与 val区别及使用