这篇文章继续提出这个问题: Add style to random loaded divs我现在试图尽可能地简化这个问题。
这里是:
使用此代码我试图根据加载的顺序为随机加载的项添加样式。
<script>
$(document).ready(function(){
var divs = $("div.item").get().sort(function(){
return Math.round(Math.random())-0.5;
}).slice(0,6)
$(divs).each(function( index ) {
if(index==1 || index==3)
$(this).css("margin-left", "0%");
else
$(this).css("margin-left", "2%"); //or whatever left value you need
});
$(divs).show();
});
</script>
我需要.item
条排列,如图所示
到目前为止,这只是每次刷新浏览器的偶然次数。
我想如果你自己尝试一下,你会看到问题所在 这是快速复制/粘贴的整个shebang
<html>
<head>
<script src="http://code.jquery.com/jquery-1.8.2.js"></script>
<style>
.container {width:750px; background-color:#CCC; height:200px; padding-top:70px; margin: 0 auto; margin-top:5%}
.item {display:none; text-align:center; width:32%; float:left}
</style>
<script>
$(document).ready(function(){
var divs = $("div.item").get().sort(function(){
return Math.round(Math.random())-0.5;
}).slice(0,6)
$(divs).each(function( index ) {
if(index==1 || index==3)
$(this).css("margin-left", "0%");
else
$(this).css("margin-left", "2%"); //or whatever left value you need
});
$(divs).show();
});
</script>
</head>
<body>
<div class="container">
<div class="item" style="background-color:#F00">1</div>
<div class="item" style="background-color:#9F0">2</div>
<div class="item" style="background-color:#FF0">3</div>
<div class="item" style="background-color:#939">4</div>
<div class="item" style="background-color:#3CF">5</div>
<div class="item" style="background-color:#CF3">6</div>
<div class="item" style="background-color:#6C9">7</div>
<div class="item" style="background-color:#999">8</div>
<div class="item" style="background-color:#90F">9</div>
<div class="item" style="background-color:#FF9">10</div>
<div class="item" style="background-color:#099">11</div>
<div class="item" style="background-color:#666">12</div>
</div>
</body>
</html>
答案 0 :(得分:2)
因为您没有随机化DOM 订单,所以只包含要包含在divs
数组中的div。订单仍然是数字。
因此,当使用divs
循环$.each(divs)
时,您正在循环创建的随机顺序,但DOM顺序仍未触及(如果这有意义)。您可以说divs
和$('div.items')
不同步。
你可以试试这个:( DEMO:http://jsbin.com/aSejiWA/3)
$(document).ready(function(){
var divs = $("div.item").get().sort(function(){
return Math.round(Math.random())-0.5;
}).slice(0,6);
$(divs).addClass('show'); // to re-select the visual items
$('.item.show').each(function( index ) {
$(this).css('margin-left', index%3 ? '2%' : 0);
}).show();
});
答案 1 :(得分:1)
这是因为你循环的div并不总是与标记中div的顺序相匹配,这意味着你将应用错误的边距。请尝试以下代码:
<html>
<head>
<script src="http://code.jquery.com/jquery-1.8.2.js"></script>
<style>
.container {width:750px; background-color:#CCC; height:200px; padding-top:70px; margin: 0 auto; margin-top:5%}
.item {display:none; text-align:center; width:32%; float:left}
</style>
<script>
$(document).ready(function(){
var $container = $('div.container'),
divs = $("div.item").get().sort(function(){
return Math.round(Math.random())-0.5;
}).slice(0,6),
<!-- Make a clone, leaving original pot untouched -->
$clonedDivs = $(divs).clone();
<!-- Clear container -->
$container.html('');
<!-- Append new divs to container -->
$clonedDivs.each(function( index ) {
$container.append(this);
if (index % 3 == 0) {
$(this).css("margin-left", "0%");
} else {
$(this).css("margin-left", "2%"); //or whatever left value you need
}
});
$clonedDivs.show();
});
</script>
</head>
<body>
<div class="pot">
<div class="item" style="background-color:#F00">1</div>
<div class="item" style="background-color:#9F0">2</div>
<div class="item" style="background-color:#FF0">3</div>
<div class="item" style="background-color:#939">4</div>
<div class="item" style="background-color:#3CF">5</div>
<div class="item" style="background-color:#CF3">6</div>
<div class="item" style="background-color:#6C9">7</div>
<div class="item" style="background-color:#999">8</div>
<div class="item" style="background-color:#90F">9</div>
<div class="item" style="background-color:#FF9">10</div>
<div class="item" style="background-color:#099">11</div>
<div class="item" style="background-color:#666">12</div>
</div>
<div class="container">
</div>
</body>
</html>