jQuery既然是模仿的數(shù)組結(jié)構(gòu),那么肯定會(huì)實(shí)現(xiàn)一套類(lèi)數(shù)組的處理方法,比如常見(jiàn)的棧與隊(duì)列操作push、pop、shift、unshift、求和、遍歷循環(huán)each、排序及篩選等一系的擴(kuò)展方法。
jQuery對(duì)象棧是一個(gè)便于Dom的查找,提供的一系列方法,jQuery可以是集合元素,那么我們?cè)趺纯焖俚恼业郊现袑?duì)應(yīng)的目標(biāo)元素呢?
jQuery提供了.get()、:index()、 :lt()、:gt()、:even()及 :odd()這類(lèi)索引值相關(guān)的選擇器,他們的作用可以過(guò)濾他們前面的匹配表達(dá)式的集合元素,篩選的依據(jù)就是這個(gè)元素在原先匹配集合中的順序。
我們來(lái)分別看一下這幾個(gè)選擇器的實(shí)現(xiàn)原理:
get方法--是通過(guò)檢索匹配jQuery對(duì)象得到對(duì)應(yīng)的DOM元素,如下代碼實(shí)現(xiàn):
get: function(num) { return num != null ? // Return just the one element from the set (num < 0 ? this[num + this.length] : this[num]) : // Return all the elements in a clean array slice.call(this); }
原理很簡(jiǎn)單,因?yàn)閖Query查詢(xún)出來(lái)的是一個(gè)數(shù)組的DOM集合,所以就可以按照數(shù)組的方法通過(guò)下標(biāo)的索引取值,當(dāng)然如果num的值超出范圍,比如小于元素?cái)?shù)量的負(fù)數(shù)或等于或大于元素的數(shù)量的數(shù),那么它將返回undefined。 假設(shè)我們頁(yè)面上有一個(gè)簡(jiǎn)單的無(wú)序列表,如下代碼:
<ul> <li id="foo">foo</li> <li id="bar">bar</li> </ul>
如果指定了index參數(shù),.get()則會(huì)獲取單個(gè)元素,如下代碼:
console.log( $( "li" ).get( 0 ) );
由于索引 index 是以 0 開(kāi)始計(jì)數(shù)的,所以上面代碼返回了第一個(gè)列表項(xiàng)<li id="foo">foo</li>
。
然而,這種語(yǔ)法缺少某些 .get() 所具有的附加功能,比如可以指定索引值為負(fù)值:
console.log( $( "li" ).get(-1) );
負(fù)的索引值表示從匹配的集合中從末尾開(kāi)始倒數(shù),所以上面這個(gè)例子將會(huì)返回列表中最后一項(xiàng):<li id="bar">bar</li>
。
由于是數(shù)組的關(guān)系,所以我們有幾個(gè)快速方法,比如頭跟尾的取值:
first: function() { return this.eq( 0 ); }, last: function() { return this.eq(-1); },
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過(guò)多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求
打開(kāi)微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書(shū)簽
舉報(bào)