jQuery函數parseHTML中的parsed分析
buildFragment函數及其參數在jQuery的核心函數parseHTML中,涉及到了一個關鍵的函數buildFragment。關于buildFragment,網上有不少研究文檔,認為通過bui
buildFragment函數及其參數
在jQuery的核心函數parseHTML中,涉及到了一個關鍵的函數buildFragment。關于buildFragment,網上有不少研究文檔,認為通過buildFragment返回的parsed對象可以幫助parseHTML返回一個代碼片段。
buildFragment函數的具體代碼
根據jQuery的源碼,在第500行處可以找到buildFragment函數的定義:parsed (); 這里讓人不理解buildGragment到底是什么,以及buildGragment函數里面的三個參數:fragment、cacheable、cachehit。
在jQuery的代碼中,可以找到關于buildFragment函數的具體代碼,大約在第40行,其中的參數是args、context和scripts。args從英文意思來看,是參數的意思;context的意思是上下文環(huán)境;scripts的意思是腳本。
buildFragment函數的內部實現
buildFragment函數首先定義了三個變量:fragment、cacheable和cachehit。片段可能緩存,緩存標記。然后定義first args[0],即第一個是第一個參數args[0]。通常,args[0]是html標簽內容。
舉個例子來解釋以下這段代碼:
//context ! context[0] || context; bb false; cc "22";; dd "33";; var aa !bb cc || dd; console.log(aa);
這段代碼的意思相當于:
var bb false;
var cc 11;
var dd 22;
if (!bb cc){
var aa cc;
}else{
var aa dd;
}
瀏覽器測試代碼。
緩存判斷
在buildFragment函數中,根據文檔可知,如果first.length小于512字節(jié),則可以將其緩存。同時,需要檢查瀏覽器是否支持checkClone屬性,并且瀏覽器是否支持html5。如果以上條件都滿足,則cacheable為true,即可以進行緩存操作。
返回對象
在buildFragment函數中,最后返回一個對象,其中包含兩個變量:和,即緩存對象和是否緩存。
現在回到parseHTML函數中的代碼:
parsed ( [ data ], context, scripts ? null : [] );
這時候,parsed就有和兩個屬性。根據情況,可以返回的克隆副本,或者直接返回。