1. 程式人生 > >JQuery學習總結一 —— JQ-tabs的實現

JQuery學習總結一 —— JQ-tabs的實現

最近面試的時候被問到有沒有看過JQuery的原始碼,本人確實看過,然而什麼都沒有記住,所以看過並沒有什麼X用,重要的,還是要動手寫程式碼。

JQuery-tabs實現

  1. 網站地址後#?的區別
    我們經常可以看到網站後面帶著一些引數,比如你用搜索引擎搜尋處結果的時候,網址中會帶有各種各樣的引數,下面我就根據我的理解來解釋一下這些引數的作用
    : 通常表識在進入這個網址之前需要傳的引數值,所在網址會根據該引數值來做一些處理從而實現
    # : 通常指頁面內部的跳轉,不會重新整理頁面,只是區域性的內容的變化(例如a標籤的href=’id’)

  2. JQuery
    JQuery-ajax可以通過load來呼叫靜態頁面從而避免單純的複製貼上,而JQuery強大的DOM操作也大大擴大了每一個template的可用性。
    load(URL, callback)


    由ajax載入的靜態頁面可以很好的相容當前頁面的樣式,但該部分與動態新增的元素一樣,在相容頁面的js操作時,存在js作用無效的問題。
    問題關鍵在於HTML的順序執行,在瀏覽器渲染頁面的時候,會從上往下依次渲染,當渲染到load函式時,瀏覽器不會等待load完畢再借著執行,而是在解析template的同時,繼續往下渲染,這個過程幾乎是同步的,所以渲染出來的DOM結構,並沒有相容頁面下面的JS。
    解決辦法可以考慮在JS部分新增一個計時器,setTimeout(function(){}, 1); 匿名函式中寫需要load相容的js即可

  3. JQuery-tabs
    考慮到使用者體驗,tabs切換用#而不用?
    首先你需要一個很好的拿到頁面引數的函式

    function getURL(name){
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return unescape(r[2]); return null;
    }

    借用正則物件RegExp可以很快的解析出parameter

    var tmp = getURL('data');
    if(tmp == "1"){
    function1();
    }else{
    function2();
    }

    那麼頁面首次載入的時候就會根據#data的值來做相應處理

    <a href="#1">Click me</a>

    那麼可以在這個a標籤的click事件中新增function1函式即可。