1

使用 jQuery 1.5.2,我给一个 div 的孩子一个随机的位置,代码在 Firefox、Chrome 和 Opera 中有效,但在 IE7-9 和 Safari 中无效。怎么了?

第二个问题,当页面被多次刷新时,随机模式不是很随机,有时相同的数字会停留在第一位等。有什么提示可以增加脚本的随机性吗?

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