jQuery的“each()”方法是for循环吗?

时间:2011-01-23 06:37:17

标签: javascript jquery

我尝试将序列化类添加到一组对象中,如下所示:

jQuery('#preload img').each(function(){
    jQuery('#thumbs').append('<img class="index' + index + '" src="' + source + '" />');
    index = ++index;
    });

它有效。结果是一组图像,每个图像都有一个类image1image2,依此类推。这正是我想要的。但这实际上是循环一组对象的可靠方法吗?或者,如果这个匿名函数执行时间较长,那么函数可能会在index递增之前从下一个对象开始?

有人知道实际发生了什么吗?

3 个答案:

答案 0 :(得分:8)

这是each函数(1.4.4)的内部工作原理:

// 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 ( var value = object[0];
                i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
        }
    }

    return object;
}

你可以在这里看到它有几个不同的情况,但它们都使用for循环并调用回调函数。所以你的代码应该没问题。

您可以在jQuery的开发版本中查找(更改主jQuery站点上的单选按钮,或单击here)。

答案 1 :(得分:5)

.each()实际上是一个for循环,它还有一个内置索引,如果传入一个这样的参数,你可以使用它:

jQuery('#preload img').each(function(i){
    jQuery('#thumbs').append('<img class="index' + i + '" src="' + source + '" />');
});

编辑:使用Ken Franqueiro的字符串连接建议实施奖励:

var thumbsAppend = "";
jQuery('#preload img').each(function(i){
    thumbsAppend += '<img class="index' + i + '" src="' + source + '" />';
});
jQuery('#thumbs').append(thumbsAppend);

编辑#2:rahul的阵列推送建议:

var thumbsAppend = [];
jQuery('#preload img').each(function(i){
    thumbsAppend.push('<img class="index' + i + '" src="' + source + '" />');
});
thumbsAppend = thumbsAppend.join('');
jQuery('#thumbs').append(thumbsAppend);

答案 2 :(得分:0)

http://api.jquery.com/jQuery.each/

http://api.jquery.com/each/

  

由数字索引迭代,从0开始   到长度为1