jQuery中實現each()

在jQuery中,each()方法非常常見。它分爲兩種:

1、靜態方法:jQuery.each(obj, callback, args);

2、爲jQuery對象服務的:$(selector).each(callback, args)

其中2是調用1實現了:

return jQuery.each(this, callback, args);

言歸正傳,我們先從each()的三個參數入手:

1、obj:當前執行的對象。一般是遍歷對象內的其中一項。

2、callback:callback需要兩個參數:1)index,即當前函數在遍歷對象中的索引;2)element:即當前對象。

3、args:可選項,如果有,則直接替換callback函數所需的參數,直接傳入到callback中。

因此,針對args的存在與否,我們劃分爲兩個情況,進行處理。

同時,遍歷的對象也有數組與非數組之分。針對數組,我們可以直接使用for + array.length直接遍歷整個數組;而針對非數組(不可用number來定位每一項),我們則使用for-in的方式來遍歷。

所以,得出瞭如下的代碼:

jQuery.each = function(obj, fn, args){
	if(args){
		if(obj.length == undefined){
			for(var i in obj)
				fn.apply(obj, args);
		}else{
			for(var i = 0, ol = obj.length; i < ol; i++){
				if(fn.apply(obj, args) === false)
					break;
			}
		}
	}else{
		if(obj.length == undefined){
			for(var i in obj){
				fn.call(obj[i], i, obj[i]);
			}
		}else{
			for(var i = 0, ol = obj.length; i < ol; i++){
				if(fn.call(obj[i], i, obj[i]);
			}
		}
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章