今天說說那一套獲取元素集合的一些方法:html
["children", "clone", "closest", "contents", "empty", "eq", "filter", "find", "first", "get", "has", "last", "not", "parent", "parents", "siblings"]node
獲取對象的全部匹配的直接子元素.api
參數爲可選的一個選擇器.若是不填則是全部子節點,不然爲匹配的全部子節點;數組
$("#demo").children();//-->全部的子節點 $("#demo").children("li");//-->全部的li子節點
返回的是一個zepto對象,裏邊存儲的是匹配的子節點的集合.dom
上邊那個過濾方法用的地方比較多,因此給它放在上邊;函數
children方法調用的filtered傳入的是兩個參數,第一個是一個集合,將全部對象的全部的子節點取出,並放入一個集合;children方法內部調用的children方法不是自身,而是另有一個children方法;↓this
咱們調用的是對象方法,而對象方法調用的那個就是一個普通的內部私有函數- -(望理解它們之間的區別);spa
返回的是作一個兼容處理的獲取子元素的實現,若是節點存在children屬性就直接取出,不存在的話,就循環childNodes並將nodeType爲1的元素篩選出來;3d
在filtered方法中,第二個參數就是children方法可選的那個選擇器,而filtered方法又會牽扯到下邊要說的兩個方法,這裏先把代碼貼上code
filter與not的做用相反.
從源碼來看,能發現一個children的隱藏功能,這是api裏邊沒說的.而咱們的確能用的;
也就是說,咱們能夠在children參數中傳入一個function,function有一個實參,就是下標.
var temp = $("li").children(function (index) { return (index % 2 === 0); })
返回的是一個boolean值.爲true則放入集合;
filter方法接收一個參數,能夠爲選擇器,也能夠爲一個function,function返回true則視爲匹配.
$(".item").filter(".nav"); // 至關於$(".item.nav"); $(".item").filter(function (index) { return index % 2 === 0; //函數內部 this指向集合中的當前元素 }); //將集合中偶數位的元素取出並放入一個集合
直接說實現,免得上邊那一大串children白說了.
首先進入方法判斷傳入選擇器是否爲一個function類型,若是是,則執行this.not(this.not(function));看起來可能有點亂.但結果是對的.
not方法與filter相反,先簡單的說它的做用.下邊再介紹它
內層not參數爲一個function,not方法內部會執行該function,並將全部不知足的元素返回,
外層not方法的參數就是內層not的返回值,也就是全部不知足的元素的集合,而後再通過篩選,取出全部不存在於參數集合中的元素.
也就變相的取出了全部知足條件的元素;
not方法用法與filter相同,返回值相反.
用法直接pass.
首先函數內部判斷傳入選擇器類型,若是是個functin,妥妥的循環對象並執行它.
不然就判斷選擇器類型是否爲字符串,若是是,則調用filter方法.加個表情;
若是不是一個字符串,就判斷是不是一個類數組,而且對象的item是一個方法,(是的,變相的判斷爲一個zepto對象.)
其他的狀況,直接經過參數構建一個zepto對象.
以上操做均爲給excludes變量賦值;
在最後,經過循環對象.將對象中不存在於excludes變量中的全部元素取出.並構件爲一個zepto對象.
也就是說,not方法傳入的參數類型是能夠比filter更豐富一些的.
能夠傳入一個zepto對象,或者一個dom標籤數組.一個html片斷.等等......
固然最後返回的對象決不會存在於not的參數中.
//indexOf就是數組的原生方法,
先發這三個方法的.其他的之後補上.