jquary坑:关于$.each
jquary中的$.each是用来遍历集合的非常便捷的方法
以前使用jquary的$.each,仅用来处理数据,未放到单独的方法中,在遍历中返回值。这次在对ajax返回的数据做处理时,调用了一个方法,需要返回值。这个坑就出现于在遍历中用return返回数据。
$.each中有个特殊语法,当在遍历中return true时,会结束本次循环,继续下次循环,当return false的时候,会结束整个循环。
$.each(result, function (index, item) {
var con = " ";
con = getFarMenu(con,result, item);
if(typeof con == "undefined" || con == null || con == " ") {
//each中结束本次循环
return true;
}else {
//结束整个循环
return false;
}
}
由each源码可知,这个方法会对return的返回值 c a l l b a c k . c a l l ( o b j [ i ] , i , o b j [ i ] ) \color{DarkTurquoise}callback.call( obj[ i ], i, obj[ i ]) callback.call(obj[i],i,obj[i])进行判断,如果为false,则跳出循环,如果为true或者其他返回值,则向下执行直到方法结束。
each: function( obj, callback ) {
var length, i = 0;
if ( isArrayLike( obj ) ) {
length = obj.length;
for ( ; i < length; i++ ) {
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}
}
} else {
for ( i in obj ) {
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}
}
}
return obj;
},
所以,如果需要返回值,最好外部定义的变量,做完处理后,在each外部返回值。