亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jquery高級編程的最佳實踐詳解

2019-11-20 20:55:01
字體:
來源:轉載
供稿:網友

加載jQuery

1.堅持使用CDN來加載jQuery,這種別人服務器免費幫你托管文件的便宜干嘛不占呢。點擊查看使用CDN的好處,點此查看一些主流的jQuery CDN地址。

復制代碼 代碼如下:

<script type="text/javascript" src="http://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>

2.安全起見,最好還是提供一個本地備份以便在無法從遠程CDN服務器獲取jQuery時網站也能工作,如上面代碼所示。詳情見此。

3.使用裸協議的URL(也就是說去掉http:或者https:),如上面代碼展示的那樣。

4.如果可能,盡量將你的JavaScript和jQuery代碼放到頁面底部。詳情移步這里,或者查看一個HTML5頁面標準模板。

5.該使用哪個版本?

如果你想兼容IE678請表用2.x的版本
針對極少數不用考慮兼容性的幸運兒,極力推薦使用最新版本的jQuery
當從CDN服務器加載jQuery時,最好把版本寫全(比如1.11.0而不是1.11或者直接寫個1)
千萬莫重復加載
6.如果你同時還使用了其他JS框架諸如Prototype, MooTools, Zepto云云,因為他們也使用了$符號,所以你就表再用美刀符號來進行jQuery 編碼了,而請用'jQuery'代替。并且調用$.noConflict()保證不會有沖突出現。

7.要檢測瀏覽器對一些新特性是否支持,請用Modernizr。插播廣告:論為毛不檢測瀏覽器

關于變量

1.jQuery類型的變量最好加個$前綴。

2.時常將jQuery選擇器返回的內容存進變量以便重用

復制代碼 代碼如下:

var $products = $("div.products"); // 慢
var $products = $(".products"); // 快

3.使用駝峰命名

關于選擇器

1.盡量ID選擇器。其背后機理其實是調用原生的document.getElementById(),所以速度較其他選擇器快。

2.使用類選擇器時表指定元素的類型。不信你看這個性能比較

復制代碼 代碼如下:

var $products = $("div.products"); // 慢
var $products = $(".products"); // 快

3.ID父親容器下面再查找子元素請用.find()方法。這樣做快的原因是通過id選擇元素不會使用Sizzle引擎。詳情看這里

4.多級查找中,右邊盡量指定得詳細點而左邊則盡量簡單點。了解更多

復制代碼 代碼如下:

// 丑陋
$("div.data .gonzalez");
// 優化后
$(".data td.gonzalez");

5.避免冗余。詳情或者查看性能比較

復制代碼 代碼如下:

$(".data table.attendees td.gonzalez");

// 好的方式:去掉了中間的冗余
$(".data td.gonzalez");

6.指定選擇的上下文。

復制代碼 代碼如下:

// 劣質的代碼:因為需要遍歷整個DOM來找到.class
$('.class');
// 高品代碼:因為只需在指定容器范圍內進行查找
$('.class', '#class-container');

7.表使用萬能選擇器。查看具體闡釋

復制代碼 代碼如下:

$('div.container > *'); // 差
$('div.container').children(); // 棒

8.警惕隱式的萬能選擇器。省略的情況下其實使用的就是*號通配符。更多信息

復制代碼 代碼如下:

$('div.someclass :radio'); // 差
$('div.someclass input:radio'); // 棒

9.ID已經表示唯一了,背后使用的是document.getElementById(),所以表跟其他選擇器混搭了。

復制代碼 代碼如下:

$('#outer #inner'); // 臟
$('div#inner'); // 亂
$('.outer-container #inner'); // 差
$('#inner'); // 干凈利落,后臺只需調用document.getElementById()

DOM操作相關

1.操作任何元素前先將其從文檔卸載,完了再貼回去。這事兒還能說細點

復制代碼 代碼如下:

var $myList = $("#list-container > ul").detach();
//...一大堆對$myList的處理
$myList.appendTo("#list-container");
2.代碼里將HTML組織好后再一次性貼到DOM中去。具體來說,性能比較

// 這樣不好
var $myList = $("#list");
for(var i = 0; i < 10000; i++){
    $myList.append("<li>"+i+"</li>");
}

// 這樣好
var $myList = $("#list");
var list = "";
for(var i = 0; i < 10000; i++){
    list += "<li>"+i+"</li>";
}
$myList.html(list);

// 但這樣更好
var array = [];
for(var i = 0; i < 10000; i++){
    array[i] = "<li>"+i+"</li>";
}
$myList.html(array.join(''));

3.不要處理不存在的元素。詳情

復制代碼 代碼如下:

// 無良的做法:jQuery后臺要跑完三個函數后才會知道這個元素其實根本不存在
$("#nosuchthing").slideUp();
// 應該這樣
var $mySelection = $("#nosuchthing");
if ($mySelection.length) {
    $mySelection.slideUp();
}

事件相關

1.一個頁面只寫一個文檔ready事件的處理程序。這樣代碼既清晰好調試,又容易跟蹤代碼的進程。

2.表用匿名函數來做事件的回調。匿名函數不易調試維護測試和復用。或許你想較真,看看這里吧

復制代碼 代碼如下:

$("#myLink").on("click", function(){...}); // 表這樣
// 這樣
function myLinkClickHandler(){...}
$("#myLink").on("click", myLinkClickHandler);

3.處理文檔ready事件的回調也表用匿名函數,匿名函數不易調試維護測試和復用:(

復制代碼 代碼如下:

$(function(){ ... }); // 糟糕的做法:無法利用此函數也無法為其寫測試用例

// 好的做法
$(initPage); // 抑或 $(document).ready(initPage);
function initPage(){
    // 這里你可以進行程序的初始化了
}

4.進一步,最好
也將ready事件的處理程序放到外部文件中引入到頁面,而頁面中內嵌的代碼只需調用即可。

復制代碼 代碼如下:

<script src="my-document-ready.js"></script>
<script>
 // 初始經一些必要的全局變量
 $(document).ready(initPage); // 抑或 $(initPage);
</script>

5.千萬表寫內聯到HTML的JS代碼,這是調試的夢魘!應該總是用jQuery來綁定事件自帶程序,這樣也方便隨時動態地取消綁定。

復制代碼 代碼如下:

<a id="myLink" href="#" onclick="myEventHandler();">my link</a> <!--不好 -->
$("#myLink").on("click", myEventHandler); // GOOD

6.如果可能盡量在綁定事件處理程序時使用一個命名空間,這樣可以方便地取消綁定而不會影響其他綁定。

復制代碼 代碼如下:

$("#myLink").on("click.mySpecialClick", myEventHandler); // 不錯
// 之后,讓我們優雅地解除綁定
$("#myLink").unbind("click.mySpecialClick");

異步操作

1.直接用$.ajax()而表去用.getJson() 或 .get(),因為jQuery內部還是將其轉為前者

2.表對HTTPS站點使用HTTP去發起請求,最好干脆就表指定(將HTTP或者HTTPS從你的URL中移除)

3.表在鏈接里面嵌參數,請使用專門的參數設置來傳遞

復制代碼 代碼如下:

// 不易閱讀的代碼...
$.ajax({
    url: "something.php?param1=test1¶m2=test2",
    ....
});

// 更易閱讀...
$.ajax({
    url: "something.php",
    data: { param1: test1, param2: test2 }
});

4.盡量指明數據類型以便你自己清楚要處理什么樣的數據(見下方會提到的Ajax模板)

5.對于異步動態加載的內容,最好使用代理來綁定事件處理程序。這樣的好處是對于之后動態加載的元素事件同樣有效。你或許想了解更多

復制代碼 代碼如下:

$("#parent-container").on("click", "a", delegatedClickHandlerForAjax);

6.使用Promise模式。更多例子

復制代碼 代碼如下:

$.ajax({ ... }).then(successHandler, failureHandler);

// 抑或
var jqxhr = $.ajax({ ... });
jqxhr.done(successHandler);
jqxhr.fail(failureHandler);

7.標準的Ajax模板一分。追尋根源

復制代碼 代碼如下:

var jqxhr = $.ajax({
    url: url,
    type: "GET", // 默認為GET,你可以根據需要更改
    cache: true, // 默認為true,但對于script,jsonp類型為false,可以自行設置
    data: {}, // 將請求參數放這里.
    dataType: "json", // 指定想要的數據類型
    jsonp: "callback", // 指定回調處理JSONP類型的請求
    statusCode: { // 如果你想處理各狀態的錯誤的話
        404: handler404,
        500: handler500
    }
});
jqxhr.done(successHandler);
jqxhr.fail(failureHandler);

動畫與特效

1.保持一個始終如一風格統一的動畫實現

2.緊遵用戶體驗,表濫用動畫特效

使用簡潔的顯示隱藏,狀態切換,滑入滑出等效果來展示元素
使用預設值來設置動畫的速度'fast','slow',或者400(中等速度)
插件相關

1.始終選擇一個有良好支持,完善文檔,全面測試過并且社區活躍的插件

2.注意所用插件與當前使用的jQuery版本是否兼容

3.一些常用功能應該寫成jQuery插件。一分jQuery插件的編寫模板

鏈式句法

1.除了用變量將jQuery選擇器返回的結果保存,還可以利用好鏈式調用。

復制代碼 代碼如下:

$("#myDiv").addClass("error").show();

2.當鏈式調用多達3次以上或代碼因綁定回調略顯復雜時,使用換行和適當的縮進來提高代碼的可讀性。

復制代碼 代碼如下:

$("#myLink")
    .addClass("bold")
    .on("click", myClickHandler)
    .on("mouseover", myMouseOverHandler)
    .show();

3.對于特別長的調用最好還是用變量保存下中間結果來簡化代碼。

其他

1.使用對象字面量來傳遞參數

復制代碼 代碼如下:

$myLink.attr("href", "#").attr("title", "my link").attr("rel", "external"); // 糟糕:調用了三次attr
// 不錯,只調用了一次attr
$myLink.attr({
    href: "#",
    title: "my link",
    rel: "external"
});

2.表將CSS與jQuery雜揉

復制代碼 代碼如下:

$("#mydiv").css({'color':red, 'font-weight':'bold'}); // 不好
.error {/* 不錯 */
    color: red;
    font-weight: bold;
}
$("#mydiv").addClass("error");

3.時刻關注官方Changelog,表使用摒棄了的方法。

4.適時地使用原生JavaScript。

復制代碼 代碼如下:

$("#myId"); // 多少還是會遜色于...

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲免费小视频| 伊人一区二区三区久久精品| 久久久在线免费观看| 国产视频精品免费播放| 日韩国产一区三区| 福利二区91精品bt7086| 欧美视频在线观看 亚洲欧| 精品国产乱码久久久久久婷婷| 免费不卡欧美自拍视频| 日本视频久久久| 亚洲sss综合天堂久久| 欧美丰满片xxx777| 在线成人中文字幕| 国产亚洲欧美日韩精品| 国产精品主播视频| www.亚洲成人| 亚洲国产精彩中文乱码av| y97精品国产97久久久久久| 欧美日本啪啪无遮挡网站| 国产精品国产自产拍高清av水多| 国产美女搞久久| 久久久久久国产精品三级玉女聊斋| 国产精品久久久久久久久久| 日韩精品中文字幕在线播放| 热久久免费视频精品| 色悠久久久久综合先锋影音下载| 欧美激情videoshd| 色樱桃影院亚洲精品影院| 欧美最顶级的aⅴ艳星| 国产午夜精品久久久| 国内精品久久久久久久久| 国产va免费精品高清在线观看| 亚洲国内精品在线| 亚洲肉体裸体xxxx137| 性色av一区二区三区红粉影视| 国产精品夜色7777狼人| 成人激情春色网| 疯狂做受xxxx欧美肥白少妇| 国产精品91一区| 91精品久久久久久久久久入口| 国产精品三级美女白浆呻吟| 国产免费一区二区三区香蕉精| 亚洲欧美另类中文字幕| 日韩精品电影网| 亚洲精品电影在线观看| 久久久久国产精品免费| 久久九九精品99国产精品| 日韩精品免费视频| 久久视频在线免费观看| 91精品在线影院| 日日骚av一区| 亚洲精品456在线播放狼人| 亚洲美女av在线| 久久免费精品日本久久中文字幕| 国产成人福利夜色影视| 日韩av手机在线| 欧美理论电影网| 91美女片黄在线观看游戏| 日韩精品在线第一页| 亚洲欧美激情精品一区二区| 97国产精品人人爽人人做| 92看片淫黄大片看国产片| 成人在线精品视频| 亚洲欧美另类在线观看| 亚洲色图18p| 啪一啪鲁一鲁2019在线视频| 国产精品成人v| 亚洲开心激情网| 成人午夜激情网| 亚洲欧美一区二区三区久久| 国产精品444| 中文字幕国产日韩| 久久视频这里只有精品| 欧美激情网站在线观看| 日韩三级影视基地| 欧美黑人性视频| 亚洲一区中文字幕| 黑人巨大精品欧美一区二区免费| 动漫精品一区二区| 亚洲精品视频网上网址在线观看| 97视频在线观看成人| 欧美肥臀大乳一区二区免费视频| 亚洲欧美一区二区激情| 91精品国产91| 久久伊人精品视频| 色yeye香蕉凹凸一区二区av| 高清一区二区三区日本久| 日韩美女激情视频| 国产精品白嫩初高中害羞小美女| 欧美视频第一页| 亚洲一区999| 中文字幕精品久久久久| 一区二区三区日韩在线| 精品一区二区电影| 2019中文字幕全在线观看| 亚洲人成77777在线观看网| 国产视频精品免费播放| 伊人久久久久久久久久| 日韩精品免费观看| 欧美成人精品在线视频| 久久久久久亚洲| 久久国产精品首页| 成人激情视频免费在线| 北条麻妃99精品青青久久| 欧美成人sm免费视频| 亚洲美女av黄| 国产亚洲精品激情久久| 日韩黄色av网站| 国产精品视频一区二区高潮| 国产久一一精品| 欧美午夜影院在线视频| 久久人人爽国产| 亚洲福利在线视频| 国产成人精品一区二区三区| 国产精品日韩在线观看| 国产综合香蕉五月婷在线| 久久久国产精品亚洲一区| 亚洲日韩中文字幕| 久久影院免费观看| 国产精品狼人色视频一区| 亚洲系列中文字幕| 伦理中文字幕亚洲| 亚洲午夜精品视频| 欧美日韩国产成人在线| 日韩亚洲欧美成人| 欧美理论片在线观看| 欧美另类在线播放| 性欧美在线看片a免费观看| 久久av在线看| 亚州欧美日韩中文视频| 欧美日韩美女在线观看| 国产精品久久色| 亚洲va欧美va国产综合久久| 国产精品1区2区在线观看| 精品日韩视频在线观看| 日韩欧美在线视频免费观看| 成人性生交大片免费看视频直播| 午夜精品久久久久久久久久久久久| 久久久女女女女999久久| 久久中文字幕视频| 伦理中文字幕亚洲| 亚洲午夜久久久影院| 国产成人亚洲综合91| 国产精品久久久久久久久久久久久| 亚洲天堂av综合网| 亚洲视频在线观看| 国产精品一区二区三区久久| 国产精品视频一区二区三区四| 在线国产精品播放| 国产男女猛烈无遮挡91| 在线中文字幕日韩| 国产日韩综合一区二区性色av| 欧美激情欧美激情在线五月| 国产精品第一页在线| 日韩av网址在线| 国产一区二区日韩| 久久综合久中文字幕青草| 亚洲电影av在线| 777国产偷窥盗摄精品视频| 色偷偷偷综合中文字幕;dd| 欧美精品情趣视频| 精品久久久国产| 日韩精品视频中文在线观看| 在线成人激情视频|