# Lesson-2
===
這個版本新增 next(),prev(),parent(),parents()
這4個選擇元素的方法還是比較常用的
首先我們需要一個func來過濾我們需要的dom
```javascript
function sibling(cur, dir) {
while ((cur = cur[dir]) && cur.nodeType !== 1) {}
return cur;
}
```
上面那段比較簡單,就是普通的過濾下元素
```javascript
next : function() {
return sibling(this[0], "nextSibling");
},
prev : function() {
return sibling(this[0], "previousSibling");
},
```
看下next方法的源碼就知道,我傳入Kodo數組對象的0個dom對象,然后取它的下一個同輩元素,直接返回,prev方法同理
```javascript
parent : function() {
var parent = this[0].parentNode;
parent && parent.nodeType !== 11 ? parent : null;
var a = Kodo();
a[0] = parent;
a.selector = parent.tagName.toLocaleLowerCase();
a.length = 1;
return a;
},
```
這段是取到第一個父元素,由于parent()返回的不是原生的DOM對象,是封裝過的數組對象(Kodo),那我們就想辦法構造一個新的Kodo對象即可
所以我在里面var了一個 Kodo,然后設置這個Kodo數組對象的selector等配置,然后直接返回這個新的Kodo對象
```javascript
parents : function() {
var a = Kodo(),
i = 0;
while ( (this[0] = this[0][ 'parentNode' ]) && this[0].nodeType !== 9 ) {
if ( this[0].nodeType === 1 ) {
a[i] = this[0];
i++;
}
}
a.length = i;
return a;
}
```
同理,在jQuery的parents方法中,返回的依舊是jQuery對象.我們依舊用上面的辦法,構造一個新對象并且返回就好了!
中間一層while循環,依次過濾出我們需要的dom元素,然后把他們都賦值到我們新var的對象里,最后別忘了設置一下新對象的length屬性,返回我們的新對象即可!
看了上面幾個方法是不是覺得!其實很多時候我們完全可以自己新創建一個對象,然后配置好它直接返回這個新對象.比如find方法我們也可以用這樣的辦法:)