JQuery選擇器調用代價很大,反覆調用效率更低。應採用緩存對象的方法或採用鏈式調用的方式。javascript
//錯誤的寫法 $("#button").click(function(){ $('#list li').addClass('strong'); $('#list li').css('color', 'red'); }); //正確的寫法 $("#button").click(function(){ $lis = $('#list li'); $lis.addClass('strong'); $lis.css('color', 'red'); }); //更好的寫法 $("#button").click(function(){ $('#list li').addClass('strong').css('color', 'red'); });
儘可能使用上下文(context)查找,避免全局選擇的使用。全局選擇器會進行整個Doc的查找,效率很低。css
//錯誤的寫法 $(".active").method(); //正確的寫法 var ul = $("#myList"); $(".active",ul).method();
避免屢次複製匿名函數的寫法,將匿名函數分離出來,供其它對象屢次調用。java
//錯誤的寫法 $('#myDiv').click( function(){ //一些操做 }); //正確的寫法 function divClickFn(){ //一些操做 } $('#myDiv').click(function(){ divClickFn(); });
當用ajax進行數據請求時,避免使用complete回調方法,而應該使用success方法。complete回調在請求成功或失敗都會觸發。ajax
//錯誤的寫法 $.ajax({ url: "http://tools.42du.cn/jsonp/student/all", }).complete(function( data ) { //一些操做 }); //正確的寫法 $.ajax({ url: "http://tools.42du.cn/jsonp/student/all", }).success(function( data ) { //一些操做 });
採用鏈式調用的方式會使對象在漸變未完成以前就被移除,即remove方法會在fadeOut方法完成以前調用。當須要第一方法完成以後,再執行第二個方法,請使用回調,即第二種方式。json
//錯誤的寫法 $("#myDiv").click(function(e) { $(this).fadeOut("slow").remove(); }); //正確的寫法 $("myDiv").click(function(e){ $(this).fadeOut("slow", function(){ $(this).remove(); }); });
若是你綁定(bind)同一事件屢次,響應就會被執行屢次。爲避免屢次執行,請先作事件解綁再從新綁定。緩存
//避免響應屢次執行 $("myDiv").unbind("click").bind("click");
this指示符存在於必定的上下文中的,當上下文變化時this指向不一樣的對象。若是還想調用原上下文中的this,則須要在原上下文中緩存原this對象($that = $(this)
)。函數
//錯誤的寫法 $( "#myList").click( function() { $(this).method(); $("#myList li").each( function() { //this並不指向myList $(this).method2(); }) });