Javascript 是jQuery';s";每个();循环的方法a?

Javascript 是jQuery';s";每个();循环的方法a?,javascript,jquery,Javascript,Jquery,我尝试向一组对象中的每一个添加一个序列化类,如下所示: jQuery('#preload img')。每个(函数(){ jQuery(“#thumbs”).append(“”); 指数=++指数; }); 它成功了。结果是一组图像,每个图像都有一个类image1,image2,等等。这正是我想要的。但这真的是一种通过一组对象循环的可靠方法吗?或者,如果此匿名函数的执行时间较长,该函数是否可能在索引增加之前在下一个对象上启动 有人知道到底发生了什么吗? 由数字索引进行迭代,从0开始 到长度-1

我尝试向一组对象中的每一个添加一个序列化类,如下所示:

jQuery('#preload img')。每个(函数(){
jQuery(“#thumbs”).append(“”);
指数=++指数;
});
它成功了。结果是一组图像,每个图像都有一个类
image1
image2
,等等。这正是我想要的。但这真的是一种通过一组对象循环的可靠方法吗?或者,如果此匿名函数的执行时间较长,该函数是否可能在
索引
增加之前在下一个对象上启动

有人知道到底发生了什么吗?

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

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

jQuery('#preload img').each(function(i){
    jQuery('#thumbs').append('<img class="index' + i + '" src="' + source + '" />');
});
jQuery('#preload img')。每个(函数(i){
jQuery(“#thumbs”).append(“”);
});

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

var thumbsAppend = "";
jQuery('#preload img').each(function(i){
    thumbsAppend += '<img class="index' + i + '" src="' + source + '" />';
});
jQuery('#thumbs').append(thumbsAppend);
var thumbsAppend = [];
jQuery('#preload img').each(function(i){
    thumbsAppend.push('<img class="index' + i + '" src="' + source + '" />');
});
thumbsAppend = thumbsAppend.join('');
jQuery('#thumbs').append(thumbsAppend);
var thumbsAppend=“”;
jQuery('#preload img')。每个(函数(i){
拇指尖+='';
});
jQuery('#thumbs').append(thumbsAppend);

编辑#2:和rahul的数组推送建议:

var thumbsAppend = "";
jQuery('#preload img').each(function(i){
    thumbsAppend += '<img class="index' + i + '" src="' + source + '" />';
});
jQuery('#thumbs').append(thumbsAppend);
var thumbsAppend = [];
jQuery('#preload img').each(function(i){
    thumbsAppend.push('<img class="index' + i + '" src="' + source + '" />');
});
thumbsAppend = thumbsAppend.join('');
jQuery('#thumbs').append(thumbsAppend);
var thumbsAppend=[];
jQuery('#preload img')。每个(函数(i){
拇指按压(“”);
});
thumbsAppend=thumbsAppend.join(“”);
jQuery('#thumbs').append(thumbsAppend);

这是
每个功能(1.4.4)的内部工作原理:

//参数仅供内部使用
每个:函数(对象、回调、参数){
变量名称,i=0,
长度=object.length,
isObj=长度===未定义的| | jQuery.isFunction(对象);
如果(args){
if(isObj){
for(对象中的名称){
if(callback.apply(对象[名称],参数)==false){
打破
}
}
}否则{
对于(;i
您可以在这里看到,它有一些不同的情况,但它们都使用
for
循环并调用回调函数。所以你的代码应该很好


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

FWIW更有效的方法是在该循环之前初始化一个空白字符串,每次通过循环连接到该字符串,然后
$(…)。在循环完成后附加该字符串一次。DOM是出了名的慢。最好使用数组推送而不是字符串连接。@rahul,仅适用于IE7和更低版本,但在其他浏览器中,这两种方法几乎相同,除了safari,Concat更快。啊,这是一个奇妙的基准测试世界。老实说,
strcat
arr.push
之间的差异与两者之间的差异相比是微不足道的。如果它在一台速度相当慢的电脑(上网本?)上工作,你应该没事。