成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

閱讀 jQuery 源碼的18個驚喜

開發 前端
我熱愛 jQuery,且盡管我認為自己算是一名高級 JavaScript 開發者,我從來沒有試過由頭到尾把 jQuery 的源碼看一遍,直到現在。

我熱愛 jQuery,且盡管我認為自己算是一名高級 JavaScript 開發者,我從來沒有試過由頭到尾把 jQuery 的源碼看一遍,直到現在。這里分享一些我一路下來學到的東西:

注意:我使用 $.fn.method() 語法來表示調用一組匹配元素的方法。比如當我說 $.fn.addClass,則表示$('div').addClass('blue') 或者 $('a.active').addClass('in-use') 此類的用法。$.fn 是 jQuery 包裝元素的原型。

1. Sizzle 的權重:Sizzle 是 jQuery 用于在 DOM 找元素的的選擇器引擎,基于 CSS 選擇器。正是它將 $('div.active')轉換成可操作的元素數組。我知道 Sizzle 占了 jQuery 相當大的部分,但它的龐大還是嚇到了我。按行數來說它很無疑是 jQuery 中***最龐大的特性。我估計它占了總代碼庫的 22%,而第二大的特性—— $.ajax 只占了 8%。

2. $.grep:這個方法與 Underscore 的 _.filter 類似。接受兩個參數,一個元素數組和一個函數,對每個元素依次執行函數,返回執行結果為 true 的元素數組。

3. 冒泡禁止:jQuery 明文禁止 load 事件冒泡。從內部看,jQuery 在所有的 load 事件中傳入特殊的 noBubble: true標記,所以 image.load 事件才不會冒泡到 window 上錯誤地觸發 window.load 事件。

4. 默認動畫速度:jQuery 通過快速連續地改變樣式屬性來實現元素動畫效果。每一次小改變被稱作一個 tick。默認動畫速度是每13毫秒運行一次 tick,要改變速度你可以重寫 jQuery.fx.interval 成你想要的整數。

5. fn.addClass 可以接受函數:我們通常向 $.fn.addClass 提供一個包含類名的字符串來創建元素。但它也可以接受一個函數。這個函數必須返回一個字符串,多個類名間要以空格隔開。這里還有個彩蛋,這個函數接受已匹配元素的索引作為參數,你可以用這個特性來構造智能變化的類名。

6fn.removeClass 也一樣:與上文的一樣,它也可以接受一個函數。這個函數也會自動接收元素的索引。
7:empty 偽選擇器:可以方便地用來匹配沒有孩子的元素。

8:lt 與 :gt 偽選擇器:它們會根據元素在匹配集合中的索引來匹配元素。比如 $('div:gt(2)') 會返回所有的 div,除了前三個(從0開始)。如果你傳入一個負數,它會倒過來從尾開始數。

9$(document).ready() 的承諾: jQuery 貌似是用回了自己的東西。在內部,可信賴的 $(document).ready() 使用了一個 jQuery 延遲來確定 DOM 在什么時候完全加載。

10. $.type: 大家肯定能熟練使用 typeof 來確定數據類型,但你知不知道 jQuery 提供了一個 .type() 方法?jQuery 版比原生版更加智能。比如 typeof (new Number(3)) 返回 object,而 $.type(new Number(3)) 則返回 number。更新:正如 ShirtlessKirk 在評論中指出,$.type 返回其對象的 .valueOf() 屬性。所以更準確的說法應該是 $.type 告訴你一個對象的返回值的類型。

11. $.fn.queue:你可以通過 $(‘div’).queue() 查看一個元素的效果隊列,很方便地了解元素還剩余多少效果。更有用的是,你可以直接操作隊列去添加效果。從 jQuery 文檔摘錄的:

  1. $( document.body ).click(function() {  
  2. $( "div" )  
  3.     .show( "slow" )  
  4.     .animate({ left: "+=200" }, 2000 )  
  5.     .queue(function() {  
  6.         $( this ).addClass( "newcolor" ).dequeue();  
  7.     })  
  8.     .animate({ left: "-=200" }, 500 )  
  9.     .queue(function() {  
  10.         $( this ).removeClass( "newcolor" ).dequeue();  
  11.     })  
  12.     .slideUp();  
  13. }); 

12. 禁用元素不會觸發 click 事件:jQuery 默認不會為禁用的元素執行 click 事件,有了這個優化,你無需自己用代碼再檢查一遍。

13. $.fn.on 可以接受對象:你知道 $.fn.on 可以接受一個對象來一次過連接多個事件嗎?jQuery 文檔的例子:

  1. $( "div.test" ).on({  
  2. click: function() {  
  3.     $( this ).toggleClass( "active" );  
  4. }, mouseenter: function() {  
  5.     $( this ).addClass( "inside" );  
  6. }, mouseleave: function() {  
  7.     $( this ).removeClass( "inside" );  
  8. }  
  9. }); 

14. $.camelCase:這個有用的方法可以將連字符式的字符串轉換成駝峰式的字符串。

15. $.active:調用 $.active 返回 XHR (XML Http Request) 查詢的個數。利用它可以手動制定 AJAX 請求的并發上限。

16. $.fn.parentsUntil / $.fn.nextUntil / $.fn.prevUntil:我比較熟悉 .parents().next() 和 .prev(),卻不知道原來還有其它的方法。它們會匹配所有的 雙親/下一個/前一個 元素直到(until)遇到符合終止條件的元素。

17. $.fn.clone 參數:當你用 .clone() 克隆一個元素,你可以用 true 作為***個參數來克隆該元素的數據屬性(data attributes)和事件。

18. 更多的 $.fn.clone 參數:除了上面的方法外,你還可以再傳多一個 true 參數來克隆該元素所有孩子的數據屬性和事件。這叫做“深克隆”。第二個參數的默認值與***個一樣(***個默認false)。所以當***個參數是 true 而你想讓第二個參數也是 true 時,完全可以忽略第二個參數。

本文由 伯樂在線 - Jaward華仔 翻譯自 quickleft

責任編輯:林師授 來源: 伯樂在線
相關推薦

2023-02-06 21:58:23

2011-02-13 10:22:57

jQueryjavascriptWeb

2021-09-16 10:36:34

開源技術 項目

2018-11-16 16:35:19

Java源碼編程語言

2017-03-16 11:39:33

Openstack源碼姿勢

2013-12-24 10:05:04

memcached

2018-03-28 16:10:23

閱讀源碼境界

2017-04-13 19:26:21

2021-03-13 14:08:00

Hadoop 源碼HDFS

2020-10-25 08:47:36

Python有序字典

2021-07-04 10:07:04

Virtual DO閱讀源碼虛擬DOM

2020-12-07 11:29:24

ReactVueVue3

2012-02-14 14:05:59

JavaSpring

2017-04-05 16:40:45

2022-10-08 08:01:17

Spring源碼服務

2009-06-05 09:34:54

Web開發IDEWeb開發

2018-11-13 15:50:41

干貨Java源碼

2021-08-02 09:50:47

Vetur源碼SMART

2021-12-20 07:58:59

GitHub源碼代碼

2023-03-06 10:42:34

CSS前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美中文在线 | 中文字幕免费 | 91精品国产一区二区三区 | 免费h视频| a级大片免费观看 | 天天狠狠 | 免费在线看a | 中文字幕第一页在线 | 99在线国产 | 九九九精品视频 | 欧美日韩亚洲视频 | 成人国产精品入口免费视频 | 国产日韩欧美一区二区 | 91观看| 久久精品一区二区 | 国产一区二区 | 夜夜骑首页 | 日本 欧美 国产 | 久久99精品国产 | 欧美日韩免费在线 | 欧美激情久久久 | 亚洲欧美日韩精品久久亚洲区 | 精品亚洲国产成av人片传媒 | 99久久国产免费 | 91玖玖 | www.788.com色淫免费 | 久久一区二区三区四区 | 久久久精品视频一区二区三区 | 久久久国产精品视频 | www亚洲精品 | 日韩av在线中文字幕 | 自拍亚洲| 欧洲尺码日本国产精品 | 天天综合网永久 | 亚洲高清在线观看 | av无遮挡 | 成人综合一区 | 日本成人在线观看网站 | 色啪网| 国内自拍视频在线观看 | 日韩在线一区二区三区 |