没什么神奇的$.each()
。这是一个简单的功能,它要么满足你的需求,要么不满足。如果没有,那么在代码示例中设置变量没有任何问题。编写自己的each()
函数来满足您的需要并没有错。它只是运行循环并调用您的回调函数的几行代码。
$.each()
这是jQuery 1.10.1 中的源代码:
// args is for internal usage only
each: function( obj, callback, args ) {
var value,
i = 0,
length = obj.length,
isArray = isArraylike( obj );
if ( args ) {
if ( isArray ) {
for ( ; i < length; i++ ) {
value = callback.apply( obj[ i ], args );
if ( value === false ) {
break;
}
}
} else {
for ( i in obj ) {
value = callback.apply( obj[ i ], args );
if ( value === false ) {
break;
}
}
}
// A special, fast, case for the most common use of each
} else {
if ( isArray ) {
for ( ; i < length; i++ ) {
value = callback.call( obj[ i ], i, obj[ i ] );
if ( value === false ) {
break;
}
}
} else {
for ( i in obj ) {
value = callback.call( obj[ i ], i, obj[ i ] );
if ( value === false ) {
break;
}
}
}
}
return obj;
},
这段代码唯一的复杂性在于它同时处理对象和数组,每种情况都有两种不同的情况。
对于您正在处理的案例,它归结为:
for ( ; i < length; i++ ) {
value = callback.call( obj[ i ], i, obj[ i ] );
if ( value === false ) {
break;
}
}
那里没有那么多代码,如果没有做你想要的,你可以很容易地编写你自己的类似迭代器来完全满足你的需要。
你甚至可以使用一个简单的for
循环。
function doExcitingStuff() {
var $elements = $("some-selector-logic");
for( var i = 0; i < $elements.length; i++ ) {
var $element = $($elements[i]);
if( someLogic($element) )
return;
// Otherwise do stuff related to $element
}
someMoreExcitingCode(); // only runs if the loop completes
}
这实际上完全取决于使您的代码最干净的原因。您可以使用$.each()
或编写自己的。