jQuery源碼探索之路(4)-- .eq(), .first(), .last(), .find(), .get()的實(shí)現(xiàn)

  1. 自己最近在學(xué)習(xí)一些js的插件的寫(xiě)法,那么當(dāng)然就繞不開(kāi)jquery,于是自己就學(xué)習(xí)中遇到的一些問(wèn)題做些總結(jié)和記錄
  1. 自己也是在學(xué)習(xí)過(guò)程中,有問(wèn)題請(qǐng)各位指出,希望大伙能多多支持,給給star,點(diǎn)點(diǎn)贊唄,github地址

這次增加五個(gè)方法,.eq(), .first(), .last(), .find(), .get(),不明白這個(gè)幾個(gè)方法作用的可以去看下JQ的使用文檔,先放代碼

Ye.prototype = {
//....
 find: function(selector) {
     if (!selector) return;
     var context = this.selector;
     return new Ye(context + ' ' + selector);
 },
 first: function() {
     return new Ye(this[0]);
 },
 last: function() {
     var len = this.length - 1;
     return new Ye(this[num]);
 },
 eq: function(num) {
     var num = num < 0 ? (this.length - 1) : num;
     return new Ye(this[num]);
 },
 get: function(num) {
     var num = num < 0 ? (this.length - 1) : num;
     return this[num];
 },
//...
}

這幾個(gè)方法都很類(lèi)似,都是需要返回只有指定的那個(gè)DOM的JQ對(duì)象。

我們就可以有兩種思路,一種是將那個(gè)JQ對(duì)象中除了那個(gè)指定DOM外其他的DOM都去掉,另一種思路就是用那個(gè)DOM構(gòu)造一個(gè)新的JQ對(duì)象,再將其返回就好了。

在JQ源碼中其實(shí)也是利用的第二種思路,只是它專(zhuān)門(mén)封裝了一個(gè).pushStack()方法來(lái)構(gòu)造新的JQ對(duì)象,其中涉及到修改selector,上下文context等。

我們就偷偷懶,直接利用new Ye(selector)來(lái)構(gòu)造就好了。

get方法只需返回DOM對(duì)象,其他eq,first,last都需要封裝。

find()方法實(shí)際上是比較復(fù)雜的,但我們也可以偷下懶,利用selector屬性可以拿到當(dāng)前JQ對(duì)象的選擇器,再和.find(selector)里的selector拼接起來(lái)就可以得到一個(gè)新的selector。
然后就可以構(gòu)造新的JQ對(duì)象了。return new Ye(context + ' ' + selector);

例如$("ul").find("li"),我們拼接成"ul li"傳過(guò)去return new Ye("ul li")

 find: function(selector) {
     if (!selector) return;
     var context = this.selector;
     return new Ye(context + ' ' + selector);
 },

這幾個(gè)方法就大功告成啦。


附:
既然您看都看完了,麻煩您點(diǎn)個(gè)贊,給個(gè)star唄,謝謝您的支持
源碼地址:https://github.com/LY550275752/my-js-plug/blob/master/Ye.js

如果您不知道我在說(shuō)什么的話,推薦您從頭開(kāi)始看我的這個(gè)系列文章:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點(diǎn)的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點(diǎn)是DOM的常...
    凜0_0閱讀 1,499評(píng)論 0 8
  • 第1章 簡(jiǎn)介 第2章 DOM節(jié)點(diǎn)的創(chuàng)建 2-1 DOM創(chuàng)建節(jié)點(diǎn)及節(jié)點(diǎn)屬性 通過(guò)JavaScript可以很方便的獲...
    mo默22閱讀 932評(píng)論 0 8
  • DOM創(chuàng)建節(jié)點(diǎn)及節(jié)點(diǎn)屬性 通過(guò)JavaScript可以很方便的獲取DOM節(jié)點(diǎn),從而進(jìn)行一系列的DOM操作。但實(shí)際上...
    阿r阿r閱讀 1,076評(píng)論 0 9
  • 生完寶寶一晃半年要過(guò)去了,從100天后開(kāi)始勵(lì)志的看書(shū)寫(xiě)作,可惜持續(xù)時(shí)間不到一個(gè)月就被寶寶出現(xiàn)的睡眠問(wèn)題打敗。從四個(gè)...
    安婩閱讀 146評(píng)論 0 0
  • 2016-08-30 氺慶 提到“說(shuō)教“這件事,我想大家腦海里浮現(xiàn)最多的景象莫過(guò)于父母喋喋不休的嘮叨,課堂上老師的...
    靳水悠悠閱讀 5,186評(píng)論 0 2

友情鏈接更多精彩內(nèi)容