jQuery.each方法是jQuery的主导工具方法有,通用例遍方法,可用以例遍对象同数组。不同让例遍
jQuery 对象的 $().each()方法,此措施可用以例遍任何对象。常常需简单独参数

object:需要例遍的靶子或数组。

callback:每个成员/元素执行的回调函数。

转调函数拥有两独参数:第一独为目的的成员或频繁组的目录,第二单吗相应变量或内容。如若需要退出
each 循环可使回调函数重返 false,此外重返值将受忽略。

规章遍数组,同时接纳要素索引和内容。举例如下:

//例遍对象,同时使用成员名称和变量内容。

$.each( [0,1,2], function(i, n){
  alert( "Item #" + i + ": " + n );
});
//例遍对象,同时使用成员名称和变量内容。

$.each( { name: "John", lang: "JS" }, function(i, n){
  alert( "Name: " + i + ", Value: " + n );
});

本来为能够一贯以实例调用

    $( 'div' ).each( function(i,n){
        return i+n.text;
    } )

实际在源码中实例(原型)方法呢是调用的静态方法,所以分析each方法只有待分析其静态方法即可,实例调用只不过是静态方法使用着之一个特例罢了。

// Execute a callback for every element in the matched set.
    // (You can seed the arguments with an array of args, but this is
    // only used internally.)
    each: function( callback, args ) {
        return jQuery.each( this, callback, args );
    },

于原型方法吃一贯将this对象当作待遍历的目标传入,下边是静态方法的源码

// args is for internal usage only
    each: function( object, callback, args ) {
        var name, i = 0,
            length = object.length,
            isObj = length === undefined || jQuery.isFunction( object );
        if ( args ) {
            if ( isObj ) {
                for ( name in object ) {
                    if ( callback.apply( object[ name ], args ) === false ) {
                        break;
                    }
                }
            } else {
                for ( ; i < length; ) {
                    if ( callback.apply( object[ i++ ], args ) === false ) {
                        break;
                    }
                }
            }

        // A special, fast, case for the most common use of each
        } else {
            if ( isObj ) {
                for ( name in object ) {
                    if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
                        break;
                    }
                }
            } else {
                for ( ; i < length; ) {
                    if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
                        break;
                    }
                }
            }
        }

        return object;
    },

物吧未是多多益善,首先接受3单参数,这多少个校官注意了于我们常使用的手册中貌似是描写的鲜个参数的大家一般用呢是运有限单参数,但是实际在源码中凡是发生3独参数可以承受的,其中老三独参数是一个勤组,会作回调函数的参数传入。

首先阐明几单变量,i、name和length是吧循环做准备的,isObj是为区别待便利之参数是数组依旧对象,通过判断该参数假使是函数或者length属性不存在来判定是目的,其他的即仍数组或者类数组来处理。

isObj = length === undefined || jQuery.isFunction( object );

这一句写的很精简利用运算符的优先顺序先执行===运算在执行||元算对于不熟悉js运算符顺序的可以参考http://www.cnblogs.com/yy-hh/p/4624792.html
其实这样的判断并不是很精准只是一个大致的区分,比如:

  var obj={length:'a'};
  var isObj= obj.length=== undefined || jQuery.isFunction( obj );
  alert(isObj);  //false

接下来就是遵照是否丰裕第三独参数举办分,先押下没增长的动静吧即便是

} else {
            if ( isObj ) {
                for ( name in object ) {
                    if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
                        break;
                    }
                }
            } else {
                for ( ; i < length; ) {
                    if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
                        break;
                    }
                }
            }
        }

因isObj变量“区分”数组和对象,对于数组使用for循环,对于目的下for…in循环,每循环一那些就是会面进行同样不行回调函数并将当前轮回的数组或者对象键和值传进去,这里以的call方法,第一个参数是函数的“this”也固然是将当下巡回的值当this后边两独凡是键和价值或者是指针和价值,所以大家下循环中使回调函数的第二只参数与用this是一律的。比如:

//刚才的例子
 $( 'div' ).each( function(i,n){
        return i+n.text;
    } )

//等价于
 $( 'div' ).each( function(i,n){
        return i+this.text;
    } )

 
对于上加了第三独参数的情而言即是反了回调函数的传值模式,使用的凡apply方法来传递参数,this指向的依旧时价只然而把args也即是第两个参数数组传递进入,这多少个数组有小参数那么回调函数就暴发小参数可以据此,这里要留意的凡第三独必是js原声数组形式免可以是类数组或者jQuery对象否则会报错因为apply方法不协助。假如回调函数再次来到false那么将超了循环比如我们可以唯有处理奇数下标数组是足以断定是偶数项时在回调函数中实施return
false即可

return object;

末回来原对象要数组等

相关文章

网站地图xml地图