jQuery源碼分析之Sizzle方法
下面是jQuery源碼關于Sizzle方法分析。
分析文字并沒有和源碼分離,而是作為注釋的方式存在,比較便于閱讀。
代碼:
jQuery.extend({
/*
DOM遍歷的三個核心函數:
jQuery.dir(elem,dir,until) :從一個元素觸發(fā),迭代檢索某個方向上的所有元素并記錄,知道與遇到docuemnt對象或遇到until匹配的元素
jQuery.nth(cur,result,dir,elem) :從一個元素觸發(fā),迭代檢索某個方向上的第N個元素
jQuery.sibling(n,elem) :元素n的所有后續(xù)兄弟元素,包含n,不包含elem
*/
/*
迭代條件:cur.nodeType !== 9 && !jQuery(cur).is(until)
elem: 起始元素
dir: 迭代方向,可選值:parentNode nextSibling previousSibling
until 選擇器表達式 如果遇到until匹配的元素 迭代終止
*/
dir:function(elem,dir,until){//支持遍歷祖先 所有兄長 所有兄弟
var matched = [],//匹配結果
cur = elem[dir];//第一次訪問 在dir方向上取一次 為循環(huán)提供第一次判斷
//不包含自身
/*
迭代訪問 知道遇到document對象或遇到until匹配的元素
cur.nodeType !== 9 當前DOM節(jié)點cur不是document對象 nodeType = 1 是element
!jQuery(cur).is(until) 當前DOM節(jié)點cur不匹配表達式until
這里或運算的過程中 滿足這個條件until !==undefined && cur.nodeType ===1才會調用jQuery.is
*/
while(cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery(cur).is(until))){
if(cur.nodeType === 1){//如果是Element元素 則放入匹配結果數組
matched.push(cur);//符合要求 放入數組
}
cur = cur[dir];//將方向dir上的下一個節(jié)點 設置為當前節(jié)點 繼續(xù)訪問
}
return matched;
},
/*
從一個元素觸發(fā),迭代檢索某個方向上的第N個元素
cur 起始元素
result第幾個 1表示當前元素 2表示下一個
dir 迭代方向
elem 多余
*/
nth:function(cur,result,dir,elem){
result = result || 1;//默認為從1開始
var num =0;
for(;cur;cur = cur[dir]){//先判斷再取,結果中包含n
//檢索到了這個元素
if(cur.nodeType === 1 && ++ num === result){
break;
}
}
//如果result為0 或者1 取當前元素
//如果result小于0 則放回undefined
return cur;
},
/*
元素n的所有后續(xù)兄弟元素 包含n 不包含elem
n 起始元素
elem排除元素
*/
sibling:function(n,elem){
var r = [];
for(;n;n = n.nextSibling){//先判斷再取,結果中包含n
//過濾掉其他的Text Attr Comment等元素
if(n.nodeType === 1 && n !== elem){
r.push(n);
}
}
return r;
}
});
聲明:本文內容由互聯網用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發(fā)現本站有涉嫌抄襲侵權/違法違規(guī)的內容, 請發(fā)送郵件至201542412@QQ.com舉報,一經查實,本站將立刻刪除。
相關推薦
-
css 注釋用法簡單介紹
注釋不會被解析器解析,它的作用是對css代碼的一種說明或者注解,以便于對于代碼的理解或者其他程序員閱讀代碼。下面就通過代碼實例介紹一下:
-
jQuery源碼分析之tokenize方法的Expr.preFilter
關于tokniz()方法的分析可以參閱jQury源碼分析之tokniz()方法一章節(jié)。下面再分析一下此方法的xr.rFiltr,需要的朋友可以做一下參考。代碼實例如下:xr.
-
jQuery源碼分析之select()方法
本章節(jié)對jQury源碼中的slct()實現進行一下分析。分析文本在源碼中,以注釋的形式存在,感興趣的朋友可以做一下參考。代碼如下:/* * slct方法是Sizzl選擇器包的核心方法之一,
-
jQuery源碼分析之tokenize()方法
tokniz方法是選擇器解析的核心函數,下面就是對jQury源碼中它的實現過程。代碼實例如下:
-
php中截取中文字符串
中截取中文字符串















