使用jQuery选择器迭代DOM元素

Yar*_*rin 3 javascript jquery for-loop css-selectors

有人能告诉我为什么这不起作用?

var top = 0;
for (divToPosition in $('.positionableDiv')) {
   divToPosition.css('top',top+'px');
   top = top + 30;
}
Run Code Online (Sandbox Code Playgroud)

Qui*_*son 14

第一个原因是滥用for循环.

jQuery有一个用于循环所选元素的习惯用法.

var top = 0;
$('.positionableDiv').each(function() {
   $(this).css('top',top+'px');
   top = top + 30;
});
Run Code Online (Sandbox Code Playgroud)

请查看...以便更好地理解for循环在javascript中的工作方式,它不会像.NET或Java那样枚举.

来自文章:

尽管使用它作为迭代数组的方法可能很诱人,但这是一个坏主意.

  • 谢谢你指出我错误地使用了javascript循环,你刚刚给我一些伤害 (2认同)

mea*_*gar 6

.each正如其他答案所提到的,迭代一组匹配元素的正确方法是.尝试使用for..in循环将迭代jQuery对象的属性,而不是它匹配的元素.

要稍微改进其他一些.each示例,您可以省略该top变量以稍微清理一下.第一个参数.each位于匹配元素集合中元素的索引中; 你可以通过在每一步乘以30来实现同样的目标.没有增量,也没有top变量混乱:

$('.positionableDiv').each(function(i) {
    $(this).css('top', (i * 30) + "px");
});
Run Code Online (Sandbox Code Playgroud)