jQuery - 将已排序的内容附加到div在IE9和Safari中不起作用

时间:2012-12-13 22:21:25

标签: jquery internet-explorer sorting random safari

使用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}

1 个答案:

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