軟件工程師-15個值得開發(fā)者關注的jQuery開發(fā)技巧和心得_第1頁
軟件工程師-15個值得開發(fā)者關注的jQuery開發(fā)技巧和心得_第2頁
軟件工程師-15個值得開發(fā)者關注的jQuery開發(fā)技巧和心得_第3頁
軟件工程師-15個值得開發(fā)者關注的jQuery開發(fā)技巧和心得_第4頁
軟件工程師-15個值得開發(fā)者關注的jQuery開發(fā)技巧和心得_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、星期八職場經驗網()【現(xiàn)成經驗助你快速完成工作】15個值得開發(fā)者關注的jQuery開發(fā)技巧和心得在這篇文章中,我們將介紹15個讓你的jQuery更加有效的技巧,大部分關于性能提升的,希望大家能夠喜歡!1. 盡量使用最新版本的jQuery類庫jQuery項目中使用了大量的創(chuàng)新。最好的方法來提高性能就是使用最新版本的jQuery。每一個新的版本都包含了優(yōu)化的bug修復。對我們來說唯一要干的就是修改tag,何樂而不為呢?我們也可以使用免費的CDN服務,例如, Google來存放jQuery類庫。1. <!- Include a specific vers

2、ion of jQuery -> 2. <script src="3. <!- Include the latest version in the 1.6 branch -> 4. <script src="2. 使用簡單的選擇器直 到最近,返回DOM元素的方式都是解析選擇器字符串,javascript循環(huán)和內建的javascript API例如,getElementbyId(),get

3、ElementsByTagName(),getElementsByClassName()三種 方式的整合使用。但是現(xiàn)代瀏覽器都開始支持querySelectorAll(),這個方法能夠理解CSS查詢器,而且能帶來顯著的性能提升。然而,我們應該避免使用復雜的選擇器返回元素。更不用說很多用戶使用老版本的瀏覽器,強迫jQuery去處理DOM樹。這個方式非常慢。1. $('lidata-selected="true" a') / Fancy, but slow   2. $('li.sel

4、ected a')  / Better   3. $('#elem')  / Best 選擇id是最快速的方式。如果你需要使用class名稱, 那么你最好帶上tag名稱,這樣會更快些。特別是在老瀏覽器和移動設備上。訪問DOM是javascript應用最慢的方式 ,因此盡量少使用。使用變量去保存選擇器,這樣會使用cache來保存。性能更好。1. var buttons = $('#navigation a.button'

5、;);  / Some prefer prefixing their jQuery variables with $:   2. var $buttons = $('#navigation a.button'); 另 外一個值得做的是jQuery給了你很多的額外便利選擇器 ,例如,:visible,:hidden,:animated還有其它,這些不是合法的CSS3選擇器。結果是你使用這些類庫就不能有效地利用 q

6、uerySelectorAll()方法。為了彌補這個問題,你需要先選擇元素,再過濾,如下:1. $('a.button:animated'); / Does not use querySelectorAll()   2. $('a.button').filter(':animated');  / Uses it 3. 數(shù)組方式使用jQuery對象運行選擇器的結果是一個jQuery對象。然而,jQuery類庫讓你感覺你正在使用一個

7、定義了index和長度的數(shù)組。1. / Selecting all the navigation buttons:  2. var buttons = $('#navigation a.button');  3.  4. / We can loop though the collection:  5. for(var i=0;i<buttons.length;i+) 

8、0;6.     console.log(buttonsi);    / A DOM element, not a jQuery object  7.  8.  9. / We can even slice it:  10. var firstFour = buttons.slice(0,4); 如果性能是你關注的,那

9、么使用簡單for或者while循環(huán)來處理,而不是$.each(),這樣能使你的代碼更快。檢查長度也是一個檢查你的collection是否含有元素的方式。1. if(buttons)    / This is always true  2.     / Do something  3.  4.  5. if(buttons.length) / True only if 

10、buttons contains elements  6.     / Do something  7.  4. 選擇器屬性jQuery提供了一個屬性,這個屬性顯示了用來做鏈式的選擇器。1. $('#container li:first-child').selector    / #container li:first-child  2. $('#container li&

11、#39;).filter(':first-child').selector    / #container li.filter(:first-child) 雖然上面的例子針對同樣的元素,選擇器則完全不一樣。第二個實際上是非法的,你不可以使用它來創(chuàng)建一個對象。只能用來顯示filter方法是用來縮小collection。5. 創(chuàng)建一個空的jQuery對象創(chuàng)建一個新的jQuery空間能極大的減小開銷。有時候,你可能需要創(chuàng)建一個空的對象,然后使用add()方法添加對象。1. var container

12、60;= $();   2. container.add(another_element); 這也是quickEach方法的基礎,你可以使用這種更快的方式而非each()。6. 選擇一個隨機元素上面我提到過,jQuery添加它自己的選擇器過濾。除了類庫,你可以添加自己的過濾器。只需要添加一個新的方法到$.expr':'對象。一個非常棒的使用方式是Waldek Mastykarz的博客中提到的:創(chuàng)建一個用來返回隨機元素的選擇器。你可以修改下面代碼:1. (function($)  2.    

13、0;var random = 0;  3.  4.     $.expr':'.random = function(a, i, m, r)   5.         if (i = 0)   6.         

14、    random = Math.floor(Math.random() * r.length);  7.           8.         return i = random;  9.       10.  11. )(jQue

15、ry);  12.  13. / This is how you use it:  14. $('li:random').addClass('glow'); 7. 使用CSS HooksCSS hooks API是提供開發(fā)人員得到和設置特定的CSS數(shù)值的方法。使用它,你可以隱藏瀏覽器特定的執(zhí)行并且使用一個統(tǒng)一的界面來存取特定的屬性。1. $.cssHooks'borderRadius' =   2.  

16、60;      get: function(elem, computed, extra)  3.             / Depending on the browser, read the value of  4.      

17、60;      / -moz-border-radius, -webkit-border-radius or border-radius  5.         ,  6.         set: function(elem, value)  7.    

18、         / Set the appropriate CSS3 property  8.           9. ;  10.  11. / Use it without worrying which property the browser

19、0;actually understands:  12. $('#rect').css('borderRadius',5); 更好的在于,人們已經創(chuàng)建了一個支持CSS hooks類庫8. 使用自定義的刪除方法你可能聽到過jQuery的刪除插件,它能夠允許你給你的動畫添加特效。唯一的缺點是你的訪問者需要加載另外一個javascript文件。幸運的是,你可以簡單的從插件拷貝效果,并且添加到jQuery.easing對象中,如下:1. $.easing.easeInOutQuad = function (x,

20、 t, b, c, d)   2.     if (t/=d/2) < 1) return c/2*t*t + b;  3.     return -c/2 * (-t)*(t-2) - 1) + b;  4. ;  5.  6. / To use

21、60;it:  7. $('#elem').animate(width:200,'slow','easeInOutQuad'); 9. $.proxy()使用callback方法的缺點之一是當執(zhí)行類庫中的方法后,context被設置到另外一個元素,例如:1. <div id="panel" style="display:none"> 2.     <button>Close</button

22、> 3. </div> 執(zhí)行下面代碼:1. $('#panel').fadeIn(function()  2.     / this points to #panel  3.     $('#panel button').click(function()  4.         /

23、0;this points to the button  5.         $(this).fadeOut();  6.     );  7. ); 你將遇到問題,button會消失,不是panel。使用$.proxy方法,你可以這樣書寫代碼:1. $('#panel').fadeIn(function()  2.     /&

24、#160;Using $.proxy to bind this:  3.  4.     $('#panel button').click($.proxy(function()  5.         / this points to #panel  6.       &#

25、160; $(this).fadeOut();  7.     ,this);  8. ); 這樣才正確的執(zhí)行。$.proxy方法接受兩個參數(shù),你最初的方法,還有context。這里閱讀更多$.proxy in the docs.。10. 判斷頁面是否太過復雜一個非常簡單的道理,約復雜的頁面,加載的速度越慢。你可以使用下面代碼檢查一下你的頁面內容:1. console.log( $('*').length ); 以上代碼返回的數(shù)值越小,網頁加載速度越快。你可以考慮通過刪

26、除無用多余的元素來優(yōu)化你的代碼11. 將你的代碼轉化成jQuery插件如果你要花一定得時間去開發(fā)一段jQuery代碼,那么你可以考慮將代碼變成插件。這將能夠幫助你重用代碼,并且能夠有效的幫助你組織代碼。創(chuàng)建一個插件代碼如下:1. (function($)  2.     $.fn.yourPluginName = function()  3.         / Your code goes he

27、re  4.         return this;  5.       6. )(jQuery); 你可以在這里閱讀更多開發(fā)教程。12. 設置全局AJAX為缺省如果你開發(fā)ajax程序的話,你肯定需要有”加載中“之類的顯示告知用戶,ajax正在進行,我們可以使用如下代碼統(tǒng)一管理,如下:1. / ajaxSetup is useful for setting gene

28、ral defaults:  2. $.ajaxSetup(  3.     url            : '/ajax/',  4.     dataType    : 'json'  5. );  6.  7. $.ajaxSta

29、rt(function()  8.     showIndicator();  9.     disableButtons();  10. );  11.  12. $.ajaxComplete(function()  13.     hideIndicator();  14.     enableButtons();  15. );  16. &

30、#160;17. /*  18.     / Additional methods you can use:  19.     $.ajaxStop();  20.     $.ajaxError();  21.     $.ajaxSuccess();  22.     $.ajaxSend();

31、  23. */ 13. 在動畫中使用delay()方法鏈式的動畫效果是jQuery的強大之處。但是有一個忽略了的細節(jié)就是你可以在動畫之間加上delays,如下:1. / This is wrong:  2. $('#elem').animate(width:200,function()  3.     setTimeout(function()  4.         $(

32、9;#elem').animate(marginTop:100);  5.     ,2000);  6. );  7.  8. / Do it like this:  9. $('#elem').animate(width:200).delay(2000).animate(marginTop:100); jQuery動畫幫了我們大忙,否則我們得自己處理一堆的細節(jié),設置timtout,處理屬性值,跟蹤動畫變化等等。大家可以參考這個文章:jQuery animations14. 合理利用HTML5的Data屬性HTML5的data屬性可以幫助我們插入數(shù)據(jù)。特別合適前后端的數(shù)據(jù)交換。jQuer

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論