1

jQuery 1.5.2 を使用して、div の子にランダムな位置を与えています。コードは Firefox、Chrome、Opera で動作しますが、IE7-9 と Safari では動作しません。なにが問題ですか?

2 番目の質問です。ページが複数回再表示された場合、ランダム パターンはあまりランダムではなく、同じ数字が 1 位にとどまることがあります。スクリプトのランダム性を高めるためのヒントはありますか?

PD: jquery フィドルは 1.6.4 です

http://jsfiddle.net/6cqtP/

スクリプト

jQuery(document).ready(function() {
              jQuery('#postscript-top-inner').each(function(){
            var parent = jQuery(this);
            var content = parent.find('.block-nodeblock');

            content.sort(function(a){
                  var new_position = parseInt( Math.random()*4 );
                  return( new_position );
            })
            .appendTo(parent);       

      });
});

HTML

<div id="postscript-top-inner">
 <div class="block-nodeblock">
1
 </div>
  <div class="block-nodeblock">
2
 </div>
  <div class="block-nodeblock">
3
 </div>
  <div class="block-nodeblock">
4
 </div>
  <div class="block-nodeblock">
5
 </div>
  <div class="block-nodeblock">
6
 </div>
  <div class="block-nodeblock">
7
 </div>
  <div class="block-nodeblock">
8
 </div>
  <div class="block-nodeblock">
9
 </div>
  <div class="block-nodeblock">
10
 </div>
  <div class="block-nodeblock">
11
 </div>
  <div class="block-nodeblock">
12
 </div>
  <div class="block-nodeblock">
13
 </div>
  <div class="block-nodeblock">
14
 </div>
  <div class="block-nodeblock">
15
 </div>
  <div class="block-nodeblock">
16
 </div>

</div>

CSS

#postscript-top-inner{width: 460px; margin:0 auto}
.block-nodeblock{width:50px; padding:25px 0; background: gray; margin:0 10px 10px 0; text-align:center; float: left}
4

1 に答える 1

1

あなたはあなたcompareFunction

function() {
    return 0.5 - Math.random();
}

Array.sort関数は、渡された を使用して配列をソートしcompareFunction(a, b)ます。これは次のように機能します

compareFunction(a, b) が 0 未満の場合、a を b よりも小さいインデックスに並べ替えます。

compareFunction(a, b) が 0 を返す場合、a と b は互いに変更されませんが、すべての異なる要素に関して並べ替えられます。

compareFunction(a, b) が 0 より大きい場合、b を a よりも小さいインデックスに並べ替えます。

比較関数は常に値を返します>= 0。それは言うA >= B B >= A。ランダム値に応じて、ほとんどの場合、A > B. したがって、それは不可能でしょうB >= A。このパラドックスのため、Array.sortの一部のブラウザー実装では、配列がまったくソートされません。

ランダム性をさらに改善するには、 Fisher-Yates アルゴリズムを実装できます。

于 2012-12-13T22:44:22.913 に答える