溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

閱讀jQuery 源碼的18個(gè)驚喜指的是什么

發(fā)布時(shí)間:2021-11-15 22:36:44 來源:億速云 閱讀:164 作者:柒染 欄目:web開發(fā)

本篇文章為大家展示了閱讀jQuery 源碼的18個(gè)驚喜指的是什么,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

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

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

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

2. $.grep:這個(gè)方法與 Underscore 的 _.filter 類似。接受兩個(gè)參數(shù),一個(gè)元素?cái)?shù)組和一個(gè)函數(shù),對每個(gè)元素依次執(zhí)行函數(shù),返回執(zhí)行結(jié)果為 true 的元素?cái)?shù)組。

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

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

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

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

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

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

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

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

$( document.body ).click(function() {  $( "div" )      .show( "slow" )      .animate({ left: "+=200" }, 2000 )      .queue(function() {          $( this ).addClass( "newcolor" ).dequeue();      })      .animate({ left: "-=200" }, 500 )      .queue(function() {          $( this ).removeClass( "newcolor" ).dequeue();      })      .slideUp();  });

12. 禁用元素不會觸發(fā) click 事件:jQuery 默認(rèn)不會為禁用的元素執(zhí)行 click 事件,有了這個(gè)優(yōu)化,你無需自己用代碼再檢查一遍。

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

$( "div.test" ).on({  click: function() {      $( this ).toggleClass( "active" );  }, mouseenter: function() {      $( this ).addClass( "inside" );  }, mouseleave: function() {      $( this ).removeClass( "inside" );  }  });

14. $.camelCase:這個(gè)有用的方法可以將連字符式的字符串轉(zhuǎn)換成駝峰式的字符串。

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

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

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

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

上述內(nèi)容就是閱讀jQuery 源碼的18個(gè)驚喜指的是什么,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI