ホームページ  >  記事  >  ウェブフロントエンド  >  jQuery_jqueryのdataメソッドに関する誤解の分析

jQuery_jqueryのdataメソッドに関する誤解の分析

WBOY
WBOYオリジナル
2016-05-16 16:43:581022ブラウズ

今日、Xie Liang 兄弟と私が何かについて話し合っていたとき、彼はカスタム属性の data-uid を操作するために attr を使用したと私が言いました。データはデータセットによって実装されているため、彼はそう言いました。 jQueryを見に行ったところ、ソースコードにはこれが見つからないと書かれていたので、困惑しました。そこで、データ メソッドのソース コードを注意深く読みましたが、私がずっと誤解していたことに気づきました。以前、データ メソッドについて私に「嘘をついた」と質問した友人のグループにもう一度お詫びを申し上げます。あなた、だから来て私を殴ってください。

今日は data メソッドについて再説明します。まず、jQuery 1.11.0 のマニュアルに記載されている内容を見てみましょう。http://shouce.jb51.net/jquery/data にアクセスしてください。 .html
使い方は非常に明確ですが、内部的にはどのように実装されているのでしょうか? クリックするとソース コードが表示されます (理解できなくても問題ありません。彼のプロセスを簡単に分析します)

其实是这样的,当我们执行例如这样的语句时 $("#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 最大的区别了,比如 <div id="id" data-test="hehe"></div> 
$("#id").data("test", "123"); 执行后依然是 data-test="hehe"
$("#id").attr("data-test", "123"); 执行后会是 data-test="123"
 
那么我们要给一个元素赋值值,或者对象的时候他们有什么区别呢?比如 <div id="id" data-test="hehe"></div> 
$("#id").data("test", {str: "hehe"}); 会把 {str: "hehe"} 赋值给 缓存,元素节点上依然是 data-test="hehe"
$("#id").attr("data-test", {str: "hehe"}); 执行后会是 data-test="[object Object]"
这个应该也有不少人遇到,至少群里有不少人问过这个问题。

実は、これまで嘘をついたわけではありません。Data は jQuery によって与えられた非常に鋭いスイス アーミー ナイフです。

わかりました、私は写真を説明するのが面倒なので、間違っていることがあれば、私に指摘してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。