我的图表需要100个小div,每次生成它们时,它们都显示为相同的高度;数组中的最后一个值。
var valuesG = new Array(100);
for (i = 0; i < valuesG.length; i++ ) {
valuesG[i] = Math.floor(Math.random() * 101);
$("#second").append("<div class='single'></div>");
$(".single").css('height', valuesG[i])
}
为什么会发生这种情况?
答案 0 :(得分:8)
您正在将新高度应用于每次迭代中的所有.single
元素。在最后一次迭代中,它们最终具有相同的高度。
你可以这样做:
$('<div class="single">')
.css('height', valuesG[i])
.appendTo($('#second'));
另外,您的代码效率不高,请看一下:
var valuesG = [], //array literal
$elements = $(); //empty jQuery object
for (var i = 0; i < 100; i++) { //we don't have to query array length each iteration
valuesG[i] = Math.floor(Math.random()*101);
//collect the elements into a jQuery object
$elements = $elements.add($('<div class="single">').css('height', valuesG[i]));
}
$elements.appendTo($("#second")); //insert to DOM once - much quicker
答案 1 :(得分:1)
目前,您正在选择类single
的所有元素。要获得所需效果,请按照下图所示的方式使用appendTo
方法。
旁注,生成的高度不是唯一的,而是随机的。例如,高度50可能存在两个元素。有关生成唯一随机数的方法,请参阅this question。
var valuesG = new Array(100), i;
for ( i=0; i < valuesG.length; i++ )
{
valuesG[i] = Math.floor(Math.random()*101);
$("<div class='single'></div>")
.css( 'height', valuesG[i] )
.appendTo("#second");
}
答案 2 :(得分:1)
你只得到一个高度(最后一个),因为你在所有div中设置相同的css类并在每个循环中更新它的高度,所以最后的高度值将应用于所有。
作为解决方案,试试这个:
for ( i=0; i < valuesG.length; i++ ) {
valuesG[i] = Math.floor(Math.random()*101);
$("<div class='single'></div>").css('height',valuesG[i]).appendTo("#second");
}