添加样式到随机加载的div - 不能正常工作

时间:2013-10-03 10:35:33

标签: javascript css

这篇文章继续提出这个问题: 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条排列,如图所示 enter image description here 到目前为止,这只是每次刷新浏览器的偶然次数。

我想如果你自己尝试一下,你会看到问题所在 这是快速复制/粘贴的整个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>

2 个答案:

答案 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>