我正在尝试将n个div添加到正文的底部,但是使用此代码:
star = $('<div class="star" />');
for(i=0; i<12; i++) {
$('body').append(star);
}
导致只有一个div被附加到身体的底部。我猜这是因为在for循环的每次迭代之间没有刷新正文的内容,但是无法弄清楚如何最好地解决它。
答案 0 :(得分:15)
为什么不multiply the string然后只使用一个.append()
来调用,而不是执行12次DOM修改?
String.prototype.times = function(n) {
return Array.prototype.join.call({length: n+1}, this);
};
var star = '<div class="star" />'.times(12);
$('body').append(star);
如果你想继续使用你的方法,你需要在循环中调用$
函数,以便在每次迭代时创建一个不同的jQuery对象。我猜这比较慢,但它确实有效。
star = '<div class="star" />';
var body = $('body');
for ( i = 0; i < 12; i++ ) {
body.append($(star));
}
答案 1 :(得分:3)
$('body').append(new Array(13).join('<div class="star" />'));
答案 2 :(得分:2)
试试这个
var star = '<div class="star" />SomeTest</div>';
for(i=0; i<12; i++) {
$('body').append(star);
}
答案 3 :(得分:0)
应该注意的是,使用FOR循环比使用jquery .each()函数迭代更糟糕,因为FOR循环不是异步的,因此在更大规模上要慢得多,因为每个()实例并排运行,当FOR时在继续下一次迭代之前,循环等待每次迭代完成。
(由于50个代表要求,不能仅仅发表评论。)
答案 4 :(得分:0)
$(document).ready(function() {
star = '<div class="star" />';
var body = $('body');
for ( i = 0; i < 12; i++ ) {
body.append($(star));
}
});
.star { border: 1px solid black; height: 20px; width: 100px;margin-bottom:1px }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>