標籤:style http io ar color os 使用 sp for
以下是書寫jQuery代碼的基本規範和最佳實務,這些不包括原生JS規範與最佳實務。
載入jQuery
1、盡量使用CDN載入jQuery。
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script><script>window.jQuery || document.write(‘<script src="js/jquery-1.11.0.min.js" type="text/javascript"><\/script>‘)</script>
百度公用CDN庫在國內所有地區速度應該是最快的,js庫也很多,推薦大家使用。
<script src="http://libs.baidu.com/jquery/1.8.3/jquery.min.js"></script>
又拍雲JS庫加速服務在國內的訪問速度還不錯,可惜js庫比較少。
<script src="http://upcdn.b0.upaiyun.com/libs/jquery/jquery-1.8.3.min.js"></script>
新浪JS/CSS庫又稱新浪SAE公用庫,在國內的訪問速度還不錯,js庫也很全,推薦大家使用。
<script src="http://lib.sinaapp.com/js/jquery/1.8.3/jquery.min.js"></script>
jQuery變數
var $myDiv = $("#myDiv"); $myDiv.click(function(){....});
選取器
// BAD 在整個DOM樹中掃描"products"類名var $products = $(".products");// GOOD 只在DIV元素中掃描"products"類名var $products = $("div.products");
// BAD, Sizzle選取器引擎尋找層級var $productIds = $("#products div.id");// GOOD, 只有div.id走Sizzle選取器引擎var $productIds = $("#products").find("div.id");
// 未最佳化$("div.data .gonzalez");// 最佳化$(".data td.gonzalez");
$(".data table.attendees td.gonzalez");// Better: 有必要時要去掉中間不必要的內容$(".data td.gonzalez");
// 要掃描整個DOM樹尋找$(‘.class‘);// 只在#class-container裡掃描$(‘.class‘, ‘#class-container‘);
$(‘div.container > *‘); // BAD$(‘div.container‘).children(); // BETTER
$(‘div.someclass :radio‘); // BAD$(‘div.someclass input:radio‘); // GOOD
$(‘#outer #inner‘); // BAD$(‘div#inner‘); // BAD$(‘.outer-container #inner‘); // BAD$(‘#inner‘); // GOOD
DOM操作
var $myList = $("#list-container > ul").detach();//...針對$myList的許多DOM操作$myList.appendTo("#list-container");
// BADvar $myList = $("#list");for(var i = 0; i < 10000; i++){ $myList.append("<li>"+i+"</li>");}// GOODvar $myList = $("#list");var list = "";for(var i = 0; i < 10000; i++){ list += "<li>"+i+"</li>";}$myList.html(list);// EVEN FASTERvar array = []; for(var i = 0; i < 10000; i++){ array[i] = "<li>"+i+"</li>"; }$myList.html(array.join(‘‘));
// BAD: 這個函數內部要先執行3個函數,才發現選取器選擇到的可能是空內容$("#nosuchthing").slideUp();// GOODvar $mySelection = $("#nosuchthing");if ($mySelection.length) { $mySelection.slideUp();}
事件
$("#myLink").on("click", function(){...}); // BAD// GOODfunction myLinkClickHandler(){...}$("#myLink").on("click", myLinkClickHandler);
$(function(){ .. }); // BAD: 不容易複用也不利於測試// GOOD$(initPage); // or $(document).ready(initPage);function initPage(){ // Document ready裡可以初始設定變數和調用其他初始化函數}
<script src="my-document-ready.js"></script><script> // 任何其他需要設定的全域變數 $(document).ready(initPage); // or $(initPage);</script>
<a id="myLink" href="#" onclick="myEventHandler();">my link</a> <!-- BAD -->$("#myLink").on("click", myEventHandler); // GOOD
$("#myLink").on("click.mySpecialClick", myEventHandler); // GOOD// 後面會很容易的解除綁定這個特定的點擊事件$("#myLink").unbind("click.mySpecialClick");
Ajax
-
1、避免使用.getJSON()和.get(),只使用$.ajax(),前兩者都是在內部使用的後者。
-
2、不要在https的網站上使用http請求。側重無模式的url(在URL上去掉http/https)。
-
3、不要把請求參數放在URL裡,而是放在data對象裡去。
// 不可讀$.ajax({ url: "something.php?param1=test1¶m2=test2", ....});// 可讀$.ajax({ url: "something.php", data: { param1: test1, param2: test2 }});
$("#parent-container").on("click", "a", delegatedClickHandlerForAjax);
$.ajax({ ... }).then(successHandler, failureHandler);// ORvar jqxhr = $.ajax({ ... });jqxhr.done(successHandler);jqxhr.fail(failureHandler);
var jqxhr = $.ajax({ url: url, type: "GET", // 預設值GET,可根據需要配置 cache: true, // 預設值true, dataType是‘script‘或‘jsonp‘時為false,可根據需要配置 data: {}, // 請求參數對象 dataType: "json", // 設定資料類型 jsonp: "callback",// 只在操作JSONP時設定此項 statusCode: { // 針對特定錯誤碼的回調處理函數 404: handler404, 500: handler500 }});jqxhr.done(successHandler);jqxhr.fail(failureHandler);
效果和動畫
1、採用統一的動畫實現方式。
2、不要過度使用動畫效果,除非追求使用者體驗。
外掛程式
-
1、始終選擇有良好維護、優秀文檔、良好測試和社區支援的外掛程式。
-
2、細心檢查該外掛程式與正在使用的jQuery版本的相容性。
-
3、任何通用的組件都應該抽取成jQuery外掛程式。
鏈式寫法
$("#myDiv").addClass("error").show();
$("#myLink") .addClass("bold") .on("click", myClickHandler) .on("mouseover", myMouseOverHandler) .show();
其他原則
$myLink.attr("href", "#").attr("title", "my link").attr("rel", "external"); // BAD// GOOD$myList.attr({ href: "#", title: "my link", rel: "external"});
$("#mydiv").css({‘color‘:red, ‘font-weight‘:‘bold‘}); // BAD.error { color: red; font-weight: bold; } /* GOOD */$("#mydiv").addClass("error"); // GOOD
-
3、不要使用遭棄用的方法。
-
4、需要時可使用原生JS方法。
$("#myId"); // 還是慢了些document.getElementById("myId");
文章來源:http://www.w3cschool.cc
jQuery--[編碼規範與最佳實務]