- 自己最近在學(xué)習(xí)一些js的插件的寫法,那么當(dāng)然就繞不開jquery左权,于是自己就學(xué)習(xí)中遇到的一些問題做些總結(jié)和記錄
- 自己也是在學(xué)習(xí)過程中,有問題請各位指出痴颊,希望大伙能多多支持赏迟,給給star,點點贊唄蠢棱,github地址
這次增加五個方法,.eq(), .first(), .last(), .find(), .get()瀑梗,不明白這個幾個方法作用的可以去看下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];
},
//...
}
這幾個方法都很類似,都是需要返回只有指定的那個DOM的JQ對象抛丽。
我們就可以有兩種思路谤职,一種是將那個JQ對象中除了那個指定DOM外其他的DOM都去掉,另一種思路就是用那個DOM構(gòu)造一個新的JQ對象亿鲜,再將其返回就好了允蜈。
在JQ源碼中其實也是利用的第二種思路,只是它專門封裝了一個.pushStack()
方法來構(gòu)造新的JQ對象蒿柳,其中涉及到修改selector饶套,上下文context等。
我們就偷偷懶垒探,直接利用new Ye(selector)
來構(gòu)造就好了妓蛮。
get方法只需返回DOM對象,其他eq,first,last都需要封裝圾叼。
find()方法實際上是比較復(fù)雜的蛤克,但我們也可以偷下懶,利用selector屬性可以拿到當(dāng)前JQ對象的選擇器夷蚊,再和.find(selector)
里的selector拼接起來就可以得到一個新的selector构挤。
然后就可以構(gòu)造新的JQ對象了。return new Ye(context + ' ' + selector);
例如$("ul").find("li")
,我們拼接成"ul li"
傳過去return new Ye("ul li")
find: function(selector) {
if (!selector) return;
var context = this.selector;
return new Ye(context + ' ' + selector);
},
這幾個方法就大功告成啦惕鼓。
附:
既然您看都看完了筋现,麻煩您點個贊,給個star唄箱歧,謝謝您的支持
源碼地址:https://github.com/LY550275752/my-js-plug/blob/master/Ye.js
如果您不知道我在說什么的話矾飞,推薦您從頭開始看我的這個系列文章: