使用jQuery 1.5.2,我给了div的子项一个随机位置,代码适用于Firefox,Chrome和Opera,但它在IE7-9和Safari中不起作用。有什么问题?
第二个问题,当页面被多次刷新时,随机模式不是很随机,有时候同一个数字会保留在第一位,等等。有什么提示可以增加脚本的随机性吗?
PD:jquery小提琴是1.6.4脚本
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}
答案 0 :(得分:1)
您可以将compareFunction
替换为
function() {
return 0.5 - Math.random();
}
Array.sort函数通过传递的compareFunction(a, b)
对数组进行排序。其工作原理如下
如果compareFunction(a,b)小于0,则将a排序为低于的索引 湾
如果compareFunction(a,b)返回0,则保持a和b不变 相互尊重,但相对于所有不同的排序 元件。
如果compareFunction(a,b)大于0,则将b排序为较低的索引 比一个。
您的比较函数始终返回值>= 0
。它表示A >= B
和 B >= A
。根据随机值,它主要发生在A > B
。因此,B >= A
是不可能的。由于这个矛盾,Array.sort的某些浏览器实现根本不对您的数组进行排序。
为了进一步改善随机性,您可以实施Fisher-Yates algorithm。