摘要:這個版本新增個方法先給出代碼我們要仔細分辨下這個方法在中返回的都是什么對象到底是對象還是對象明白了這個后就很容易能寫出這個方法首先我們知道一般都會這樣寫查找下的返回的是數組對象而不是原生的對象那么我們就可以換個思路因為我們能拿到這個
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]; }
我們要仔細分辨下,這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數組對象,而不是原生的dom對象
那么我們就可以換個思路,因為我們能拿到 $("div") 這個selector對吧? 也就是 div
既然又要find("span"),我們的selector就可以寫成 ("div span"),之后直接返回新的數組對象不就好了嗎??
var context = this.selector; 先緩存當前的selector上下文,之后拼接我們find的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]; }
find方法比較難解決,之后這4個就很容易了,first,last,eq,分別返回的都是封裝后的對象,只有get返回的是原生 dom對象.
我們根據之前的思路,直接取數組對象的index,return下新的即可,是不是很簡單? :)
之后是ajax部分
之前說過之所以,可以用$.ajax直接調用,是因為可以把方法直接掛在在構造函數上,作為靜態方法
所以我們只需要寫好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, //數據成功返回后的回調方法 complete: false //ajax完成后的回調方法 }; 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); } }
在這我就不細講ajax的具體過程,我也實現了一個比較簡單的ajax,就公開了get和post方法.大家可以實現一個更加復雜好用的ajax替換我這段代碼
你說你都耐心的翻到這了? 不給我一個star說的過去么你?
github地址: https://github.com/MeCKodo/forchange/tree/master/lesson-5
可想實現一個自己的簡單jQuery庫?(五):http://segmentfault.com/a/1190000004001281
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86246.html
摘要:這個版本新增個方法先給出代碼我們要仔細分辨下這個方法在中返回的都是什么對象到底是對象還是對象明白了這個后就很容易能寫出這個方法首先我們知道一般都會這樣寫查找下的返回的是數組對象而不是原生的對象那么我們就可以換個思路因為我們能拿到這個 Lesson-5 這個版本新增6個方法,find(),first(),last(),eq(),get(),ajax 先給出代碼 find : funct...
摘要:這個版本完善和方法新增和鏈式測試在我們上一個版本中沒有對方法傳對象進行解析在這我們要進行完善剛剛好我們現在已經有了方法直接用上吧在我們的循環中要先判斷下傳入的參數是字符串還是對象如果是字符串我們就按照這樣的方式處理如果是對象首先我們緩存下 Lesson-6 這個版本完善hasClass和css 方法. 新增 attr和data css: function(attr, val) { /...
摘要:這個版本完善和方法新增和鏈式測試在我們上一個版本中沒有對方法傳對象進行解析在這我們要進行完善剛剛好我們現在已經有了方法直接用上吧在我們的循環中要先判斷下傳入的參數是字符串還是對象如果是字符串我們就按照這樣的方式處理如果是對象首先我們緩存下 Lesson-6 這個版本完善hasClass和css 方法. 新增 attr和data css: function(attr, val) { /...
閱讀 1229·2021-11-24 09:39
閱讀 380·2019-08-30 14:12
閱讀 2592·2019-08-30 13:10
閱讀 2434·2019-08-30 12:44
閱讀 959·2019-08-29 16:31
閱讀 846·2019-08-29 13:10
閱讀 2434·2019-08-27 10:57
閱讀 3152·2019-08-26 13:57