jquery选择器中的循环

jquery选择器中的循环,jquery,for-loop,jquery-selectors,Jquery,For Loop,Jquery Selectors,所以这应该是一个非常简单的循环,但它不适合我 for(var j = 1, len = $('#account .person').length; j <= len; j++) { $('#a' + j).click( function(){ $('#account' + j).css({left:'0%'}); }); }; 如果您对每个元素进行相同的更改,并且每个#a_uu元素实际上与.person类元素相同,那么您可以简单地执行

所以这应该是一个非常简单的循环,但它不适合我

    for(var j = 1, len = $('#account .person').length; j <= len; j++) {

    $('#a' + j).click( function(){ 
        $('#account' + j).css({left:'0%'});
    });

    };

如果您对每个元素进行相同的更改,并且每个
#a_uu
元素实际上与
.person
类元素相同,那么您可以简单地执行以下操作:

$(“#account.person”).css({left:'0%})

不需要循环。如果它们不相关,并且您需要循环,请使用注释中所述的
.each()

var j =1;
$("#account .person").each( function(){
    j++;
    $('#a' + j).data( 'num', j );
    $('#a' + j).click( function(){ 
        $('#account' + $(this).data('num') ).css({left:'0%'});
    });
});
功能

$('#a' + j).click( function(){ 
    $('#account' + j).css({left:'0%'});
});
创建一个。简言之,js解释器即使在块完成后仍保持局部变量的活动状态,但不会复制它。因此,当单击事件发生时,
块的
已经完成,,并且
j
的值与最后一次迭代时的值相同

为了避免这种情况,请根据您所拥有的,即您正在附加处理程序的元素,确定函数中的
j
,如下所示(警告:未测试):


有人添加了这个作为答案,然后出于某种原因删除了它,但它对我有效

$('[id^="a"]').click( function(){
 $('#account'+this.id.match(/(\d+)$/)[0]).css({left:'0%'});
});

有什么理由我不应该使用这种方法吗?

看看each()你的意思?就像循环中的点击事件一样?您面临的错误是什么?如果您对每个元素以及#a#have.person类进行相同的更改,您只需执行
$(“#account.person”).css({左:'0%})
@SetSailMedia应该是答案,而不是评论。“我肯定会把它投上去的。”显然是媒体的错误。谢谢你的提示:)这一个也可以,但是我不得不更改var j=0,因为出于某种原因它跳过了第一个元素是的,使用这样的正则表达式会使代码非常不可读。正则表达式在这里不合适。对于
循环,它的性能也会比
 $('#a' + j).click( function(){ 
    var correct_j = $(this).attr('id').replace('a','');
    $('#account' + correct_j ).css({left:'0%'});
 });
$('[id^="a"]').click( function(){
 $('#account'+this.id.match(/(\d+)$/)[0]).css({left:'0%'});
});