閱讀jQuery原始碼帶給我們的18個驚喜

edithfang發表於2014-08-05



以下便是閱讀jQuery原始碼後挖掘的18條令人驚奇的資訊:
1. sizzle的大小
Sizzle是用來幫助jQuery實現DOM查詢操作的引擎,可能你不知道它佔用了jQuery原始碼的22%。

其次最大的特性是$.ajax,佔用了jQuery原始碼中的8%。
2. $.grep
這個方法類似underscore中的_.filter方法,使用兩個引數,一個陣列變數和一個回撥函式,返回通過回撥函式為true的元素。
3. 冒泡提醒
jQuery特意的阻止了一個事件型別的氣泡。這就是load事件,jQuery傳遞了一個特別的noBubble:true來阻止事件冒泡到window物件(這可能導致錯誤的匹配了window.load事件)
4. 預設的動畫速度
jQuery通過快速的變化元素樣式屬性來實現動畫。每一個變化被叫做一個"滴答"。預設的動畫速度是每13毫秒滴答一次,你可以通過重寫jQuery.fx.interval來修改預設的值
5. $.fn.addClass接受一個方法
我們通常提供$.fn.addClass一個class定義名稱。但是它同樣可以支援方法。你只需要方法返回一個空格分隔的字串class定義即可。這個方法甚至接受元素的索引為引數,這樣我們可以構建自己的只能class名。
6. $.fn.removeClass同樣支援
這個方法也可以支援接受方法為引數,和$.fn.addClass一樣。
7. :empty偽選擇器
這個偽選擇器可以匹配所有沒有子元素的元素
8. :lt和:gt偽選擇器
這些偽選擇器基於索引來匹配。例如,$('div:gt(2)')將會返回所有的div除了前3個元素(基於0索引)。如果你提供一個負值,那麼就從末尾算起。
9. $(document.ready()使用了promise
jQuery內部使用了jQuery的deferred來保證DOM完整被載入
10. $.type
大家可能都熟悉typeof來判斷資料型別,但是你是否知道jQuery提供了.type()方法?這個方法比瀏覽器本地版本更智慧。

例如,typeof(new Number(3))返回了“object”,然而$.type(new Number(3))放回數字。

更確切的說$.type告訴你返回物件的值型別
11. $.fn.queue
你可以使用$('div').queue()來檢查一個元素的特效佇列。這對於你想了解多少個特效還保持在物件元素很有好處。

更有用的在於,你可以直接操作佇列來新增自己的特效,如下:
        
        
                
                
                        
                        
                                $( 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. Click事件針對禁用元素將失效
jQuery針對禁用的元素自動中斷點選事件,這樣可以有效優化保證讓你不用書寫更多程式碼來檢測這種情況
13. $.fn.on 接受多個物件
你是否知道$.fn.on方法接受物件來新增多個事件?下面是例子:
        
        
                
                
                        
                        
                                $( "div.test" ).on({
                        

                        
                                click: function() {
                        

                        
                                 $( this ).toggleClass( "active" );
                        

                        
                                }, mouseenter: function() {
                        

                        
                                 $( this ).addClass( "inside" );
                        

                        
                                }, mouseleave: function() {
                        

                        
                                 $( this ).removeClass( "inside" );
                        

                        
                                }
                        

                        
                                });
                        

                

        


14. $.camelCase
這個方法幫助你將破折號風格字串轉化為駝峰拼寫方式,如下:

background-color 轉化為 backgroundColor
15. $.active
呼叫$.active返回活動的XHR查詢數量。這個可以用來強制限制同時處理多少個ajax請求
16. $.fn.parentsUntil/$.fn.nextUntil/$.fn.prevUntil
我過去非常熟悉.parents(),.next()和.prev()方法,但是不知道其它版本。

他們匹配所有父層/下一個元素/上一個元素直到遇到了停止條件元素
17. $.fn.clone引數
這個方法帶的引數可以通過傳遞引數true來幫助你確認拷貝資料屬性和事件
18. 更多$.fn.clone引數
除了上面引數,你也可以通過傳遞另外一個引數true來克隆子元素的資料屬性和事件,這叫做深層次克隆。

第二引數預設使用第一個引數值。如果你第一個引數為true,那麼第二個引數也為true的話,就可以省略

以上就是閱讀jQuery原始碼的收穫,希望大家覺得有幫助,感謝閱讀,如果你有更多的心得,請和我們分享!
相關閱讀
評論(4)

相關文章