最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

對 jQuery 中 data 方法的誤解分析

 更新時間:2014年06月18日 14:02:17   投稿:mdxy-dxy  
一直以來都認(rèn)為新版本中 data 是調(diào)用 dataset 實現(xiàn)的,對于低版本IE則采用 getAttribute其實一直是我誤解了,也不知道最初這個想法是怎么來的

今天 謝亮 兄弟和我討論一個東西的時候,談到了性能,他用的是 attr 操作自定義屬性 data-uid,我說用 data 好,因為是 dataset 實現(xiàn),然后他去翻了下 jQuery 源碼和我說,沒有發(fā)現(xiàn)這個東西,我就納悶了。于是我去仔細(xì)讀了下 data 方法的源碼,才發(fā)現(xiàn)我一直誤會了,再此,向之前問我 data 方法的群友道歉,我 "騙" 了你們,你們來打我吧。

今天我就重新解釋下 data 方法,先看下 jQuery 1.11.0 的手冊里腫么說的吧,請移步至http://shouce.jb51.net/jquery/data.html
用法這里說的很清楚了,但是內(nèi)部是怎么實現(xiàn)的呢? 戳我看源碼  (看不懂沒關(guān)系,我會簡單分析下他的流程)

其實是這樣的,當(dāng)我們執(zhí)行例如這樣的語句時 $("#id").data("test"); (簡化后的過程) 
第一步: jQuery 會獲取到 $("#id") 元素,對吧、 
第二步: 執(zhí)行到 data方法 的時候,他會通過 attributes 取我們要的對應(yīng)值。 
第三步: 返回結(jié)果給我們,然后 jQuery 把值緩存到內(nèi)部對象里 
第一次取的時候,我們可以得到的 undefined,字符串,數(shù)字或者解析后的json。 
 
那有人會說這個和 attr 有什么區(qū)別呢? 
當(dāng)我們第二次執(zhí)行 $("#id").data("test"); 的時候: 
第一步: jQuery 會獲取到 $("#id") 元素,和上面一樣。 
第二步: 執(zhí)行到 data方法 的時候,從 jQuery 的緩存中取值 
第三步: 返回結(jié)果給我們 
 
發(fā)現(xiàn)第二步不同了,對吧,為什么不是從 attributes 取值,而是從緩存中取呢? 
緩存其實是js的對象,簡單說就類似 var cache = {}; jQuery 在第一次取值之后就會保存到這個緩存對象中,這樣我們再次操作的時候就非??炝?、 
往往性能的損耗都是在 dom 操作上,所以避免重復(fù)操作 dom 是非常必要的。 
 
到這,也能看出他和 attr 最大的區(qū)別了,比如 <div id="id" data-test="hehe"></div> 
$("#id").data("test", "123"); 執(zhí)行后依然是 data-test="hehe"
$("#id").attr("data-test", "123"); 執(zhí)行后會是 data-test="123"
 
那么我們要給一個元素賦值值,或者對象的時候他們有什么區(qū)別呢?比如 <div id="id" data-test="hehe"></div> 
$("#id").data("test", {str: "hehe"}); 會把 {str: "hehe"} 賦值給 緩存,元素節(jié)點(diǎn)上依然是 data-test="hehe"
$("#id").attr("data-test", {str: "hehe"}); 執(zhí)行后會是 data-test="[object Object]"
這個應(yīng)該也有不少人遇到,至少群里有不少人問過這個問題。

其實我之前也沒騙你們,自定義屬性沒必要老是 attr 他,data 是 jQuery 賦予我們的一把瑞士軍刀,非常鋒利的。

好了,我是懶人,懶的配圖,已經(jīng)寫了不少字了,如果有什么說的不對的地方,你們來打我吧

相關(guān)文章

  • jQuery讀取本地的json文件(實例講解)

    jQuery讀取本地的json文件(實例講解)

    下面小編就為大家?guī)硪黄猨Query讀取本地的json文件(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • jquery ui sortable拖拽后保存位置

    jquery ui sortable拖拽后保存位置

    這篇文章主要為大家詳細(xì)介紹了jquery ui sortable拖拽后保存位置的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • jQuery.parseJSON()函數(shù)詳解

    jQuery.parseJSON()函數(shù)詳解

    今天小編就為大家分享一篇關(guān)于jQuery.parseJSON()函數(shù)詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 基于jQuery實現(xiàn)音樂播放試聽列表

    基于jQuery實現(xiàn)音樂播放試聽列表

    這篇文章主要介紹了基于jQuery實現(xiàn)音樂播放試聽列表的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • jQuery選擇器基礎(chǔ)入門教程

    jQuery選擇器基礎(chǔ)入門教程

    這篇文章主要介紹了jQuery選擇器基礎(chǔ)知識,結(jié)合實例分析了jQuery選擇器的功能、使用方法與相關(guān)操作技巧,需要的朋友可以參考下
    2016-05-05
  • jQuery.validate.js表單驗證插件的使用代碼詳解

    jQuery.validate.js表單驗證插件的使用代碼詳解

    Validate是基于jQuery的一款輕量級驗證插件,內(nèi)置豐富的驗證規(guī)則,這篇文章主要介紹了jQuery.validate.js表單驗證插件的使用代碼詳解,需要的朋友可以參考下
    2018-10-10
  • jQuery Easyui實現(xiàn)左右布局

    jQuery Easyui實現(xiàn)左右布局

    jQuery EasyUI 是一個基于 jQuery 的框架,集成了各種用戶界面插件。接下來通過本文給大家介紹jQuery Easyui實現(xiàn)左右布局,涉及到到easyui左右布局相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • jQuery菜單實例(全選,反選,取消)

    jQuery菜單實例(全選,反選,取消)

    下面小編就為大家?guī)硪黄猨Query菜單實例(全選,反選,取消)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • jQuery的ajax和遍歷數(shù)組json實例代碼

    jQuery的ajax和遍歷數(shù)組json實例代碼

    下面小編就為大家?guī)硪黄猨Query的ajax和遍歷數(shù)組json實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • jQuery插件Skippr實現(xiàn)焦點(diǎn)圖幻燈片特效

    jQuery插件Skippr實現(xiàn)焦點(diǎn)圖幻燈片特效

    Skippr 是一個超級簡單的 jQuery 幻燈片插件。只是包括你的網(wǎng)頁中引入 jquery.skippr.css 和 jquery.skippr.js 文件就能使用了。Skippr 能夠自適應(yīng)窗口寬度,而且導(dǎo)航是獨(dú)特的條形導(dǎo)航。
    2015-04-04

最新評論

华宁县| 甘南县| 宜兰市| 云阳县| 宁津县| 扬州市| 宁河县| 青海省| 桂阳县| 禄丰县| 屏东县| 吴桥县| 大丰市| 崇阳县| 兴业县| 乐山市| 平塘县| 乌兰县| 房山区| 常山县| 乐平市| 锡林郭勒盟| 胶南市| 萨嘎县| 惠东县| 西盟| 盘锦市| 舒城县| 双辽市| 阳城县| 称多县| 嘉禾县| 黑山县| 澄迈县| 分宜县| 都安| 连平县| 盐城市| 丰顺县| 基隆市| 桐梓县|