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