成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

可想實(shí)現(xiàn)一個自己的簡單jQuery庫?(六)

whinc / 2895人閱讀

摘要:這個版本新增個方法先給出代碼我們要仔細(xì)分辨下這個方法在中返回的都是什么對象到底是對象還是對象明白了這個后就很容易能寫出這個方法首先我們知道一般都會這樣寫查找下的返回的是數(shù)組對象而不是原生的對象那么我們就可以換個思路因?yàn)槲覀兡苣玫竭@個

Lesson-5

這個版本新增6個方法,find(),first(),last(),eq(),get(),ajax

先給出代碼

find : function(selector) {
    if(!selector) return;
    var context = this.selector;
    return new Kodo(context + " " + selector);
},
first : function() {
    return new Kodo(this[0])
},
last : function() {
    var num = this.length - 1;
    return new Kodo(this[num]);
},
eq : function(num) {
    var num = num < 0 ? (this.length - 1) : num;
    console.log(num);
    return new Kodo(this[num]);
},
get : function(num) {
    var num = num < 0 ? (this.length - 1) : num;
    console.log(num);
    return this[num];
}

我們要仔細(xì)分辨下,這4個方法在jQuery中返回的都是什么對象?到底是dom對象還是jQuery對象.

明白了這個后就很容易能寫出這4個方法

find : function(selector) {
    if(!selector) return;
    var context = this.selector;
    return new Kodo(context + " " + selector);
}

首先find, 我們知道一般都會這樣寫 $("div").find("span") 查找div下的span,返回的是span數(shù)組對象,而不是原生的dom對象

那么我們就可以換個思路,因?yàn)槲覀兡苣玫?$("div") 這個selector對吧? 也就是 div

既然又要find("span"),我們的selector就可以寫成 ("div span"),之后直接返回新的數(shù)組對象不就好了嗎??

var context = this.selector; 先緩存當(dāng)前的selector上下文,之后拼接我們find的selector

所以最后return 就變?yōu)? new Kodo(context + " " + selector); 雖然效率不一定高,總是一種解決思路不是嗎?

first : function() {
    return new Kodo(this[0])
},
last : function() {
    var num = this.length - 1;
    return new Kodo(this[num]);
},
eq : function(num) {
    var num = num < 0 ? (this.length - 1) : num;
    console.log(num);
    return new Kodo(this[num]);
},
get : function(num) {
    var num = num < 0 ? (this.length - 1) : num;
    console.log(num);
    return this[num];
}

find方法比較難解決,之后這4個就很容易了,first,last,eq,分別返回的都是封裝后的對象,只有g(shù)et返回的是原生 dom對象.

我們根據(jù)之前的思路,直接取數(shù)組對象的index,return下新的即可,是不是很簡單? :)

之后是ajax部分

之前說過之所以,可以用$.ajax直接調(diào)用,是因?yàn)榭梢园逊椒ㄖ苯訏煸谠跇?gòu)造函數(shù)上,作為靜態(tài)方法

所以我們只需要寫好ajax最后把你想要公開的接口放在Kodo上即可

Kodo.get = function(url,sucBack,complete) {
    var options = {
        url : url,
        success : sucBack,
        complete : complete
    };
    ajax(options);
};
Kodo.post = function(url,data,sucback,complete) {
    var options = {
        url : url,
        type : "POST",
        data : data,
        sucback    : sucback,
        complete : complete
    };
    ajax(options);
};
function ajax(options) {
    var defaultOptions = {
        url: false, //ajax 請求地址
        type : "GET",
        data : false,
        success: false, //數(shù)據(jù)成功返回后的回調(diào)方法
        complete: false //ajax完成后的回調(diào)方法
    };
    for (i in defaultOptions) {
        if (options[i] === undefined) {
            options[i] = defaultOptions[i];
        }
    }
    var xhr = new XMLHttpRequest();
    var url = options.url;
    xhr.open(options.type, url);
    xhr.onreadystatechange = onStateChange;
    if (options.type === "POST") {
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    }
    xhr.send(options.data ? options.data : null);

    function onStateChange() {
        if (xhr.readyState == 4) {
            var result,
                status = xhr.status;

            if ((status >= 200 && status < 300) || status == 304) {
                result = xhr.responseText;
                if (window.JSON) {
                    result = JSON.parse(result);
                } else {
                    result = eval("(" + result + ")");
                }
                ajaxSuccess(result, xhr)
            } else {
                console.log("ERR", xhr.status);
            }
        }
    }
    function ajaxSuccess(data, xhr) {
        var status = "success";
        options.success && options.success(data, options, status, xhr)
        ajaxComplete(status)
    }
    function ajaxComplete(status) {
        options.complete && options.complete(status);
    }
}

在這我就不細(xì)講ajax的具體過程,我也實(shí)現(xiàn)了一個比較簡單的ajax,就公開了get和post方法.大家可以實(shí)現(xiàn)一個更加復(fù)雜好用的ajax替換我這段代碼

你說你都耐心的翻到這了? 不給我一個star說的過去么你?

github地址: https://github.com/MeCKodo/forchange/tree/master/lesson-5
可想實(shí)現(xiàn)一個自己的簡單jQuery庫?(五):http://segmentfault.com/a/1190000004001281

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/49655.html

相關(guān)文章

  • 可想實(shí)現(xiàn)一個自己簡單jQuery?()

    摘要:這個版本新增個方法先給出代碼我們要仔細(xì)分辨下這個方法在中返回的都是什么對象到底是對象還是對象明白了這個后就很容易能寫出這個方法首先我們知道一般都會這樣寫查找下的返回的是數(shù)組對象而不是原生的對象那么我們就可以換個思路因?yàn)槲覀兡苣玫竭@個 Lesson-5 這個版本新增6個方法,find(),first(),last(),eq(),get(),ajax 先給出代碼 find : funct...

    Warren 評論0 收藏0
  • 可想實(shí)現(xiàn)一個自己簡單jQuery?(七)

    摘要:這個版本完善和方法新增和鏈?zhǔn)綔y試在我們上一個版本中沒有對方法傳對象進(jìn)行解析在這我們要進(jìn)行完善剛剛好我們現(xiàn)在已經(jīng)有了方法直接用上吧在我們的循環(huán)中要先判斷下傳入的參數(shù)是字符串還是對象如果是字符串我們就按照這樣的方式處理如果是對象首先我們緩存下 Lesson-6 這個版本完善hasClass和css 方法. 新增 attr和data css: function(attr, val) { /...

    stackfing 評論0 收藏0
  • 可想實(shí)現(xiàn)一個自己簡單jQuery?(七)

    摘要:這個版本完善和方法新增和鏈?zhǔn)綔y試在我們上一個版本中沒有對方法傳對象進(jìn)行解析在這我們要進(jìn)行完善剛剛好我們現(xiàn)在已經(jīng)有了方法直接用上吧在我們的循環(huán)中要先判斷下傳入的參數(shù)是字符串還是對象如果是字符串我們就按照這樣的方式處理如果是對象首先我們緩存下 Lesson-6 這個版本完善hasClass和css 方法. 新增 attr和data css: function(attr, val) { /...

    gplane 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<