有人能告诉我为什么这行代码不起作用吗?
var top = 0;
for (divToPosition in $('.positionableDiv')) {
divToPosition.css('top',top+'px');
top = top + 30;
}
有人能告诉我为什么这行代码不起作用吗?
var top = 0;
for (divToPosition in $('.positionableDiv')) {
divToPosition.css('top',top+'px');
top = top + 30;
}
第一个原因是误用了for
循环。
jQuery有一种惯用法来遍历选定的元素..
var top = 0;
$('.positionableDiv').each(function() {
$(this).css('top',top+'px');
top = top + 30;
});
请查看for...in以更好地了解javascript中for...in循环的工作方式,它的枚举方式与.NET或Java不同。虽然可能会诱人将其用作遍历数组的一种方式,但这是一个坏主意。.each
,正如其他答案所述。尝试使用for..in
循环将遍历jQuery对象的属性,而不是它所匹配的元素。.each
示例,您可以省略top
变量以使事情更加清晰。 .each
的第一个参数是匹配元素集合中的元素索引;您可以在每个步骤中将其乘以30来实现相同的效果。没有递增和没有top
变量杂乱事情:$('.positionableDiv').each(function(i) {
$(this).css('top', (i * 30) + "px");
});
var top = 0;
for (var pdiv in $('.positionableDiv').get()) {
$(pdiv).css('top', top + 'px');
top = top + 30;
}
get()
来检索元素数组。$('.positionableDiv').each(function() {
$(this).css('top', top);
top += 30;
});
你语句中的 $('.positionableDiv') 是一个具有许多属性的 jQuery 对象。你想要的是迭代匹配的元素,而不是那样做。
尝试:
var top = 0;
$('.positionableDiv').css('top', function(index, value) {
var cTop = top;
top = top + 30;
return cTop + 'px';
});