jquery dataメソッドの値とjs attrの値の違い

1960 ワード


jquery dataメソッドの実行メカニズム:domを初めて検索し、attributesを使用してdomノード値を取得し、その値をキャッシュに保存します.2回目の操作の場合、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       ,   <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]"
           ,              。