我从一个网站获得了这段代码,用于随机化项目列表。[这是一个音乐播放器,在用户每次新访问时随机播放歌曲(列表),因此不会因为从他们在过去访问中听到的同一首歌曲开始而让他们厌烦]
$(document).ready(function(){
$('ul').each(function(){
// get current ul
var $ul = $(this);
// get array of list items in current ul
var $liArr = $ul.children('li');
// sort array of list items in current ul randomly
$liArr.sort(function(a,b){
// Get a random number between 0 and 10
var temp = parseInt( Math.random()*10 );
// Get 1 or 0, whether temp is odd or even
var isOddOrEven = temp%2;
// Get +1 or -1, whether temp greater or smaller than 5
var isPosOrNeg = temp>5 ? 1 : -1;
// Return -1, 0, or +1
return( isOddOrEven*isPosOrNeg );
})
// append list items to ul
.appendTo($ul);
});
});
当我在 Chrome 浏览器中打开我的网站时,这工作得很好。排序非常繁重,因此我可以看到该列表在很大程度上是随机的。
但在 Firefox 和 IE 中,排序并没有很好地进行。我看到第一个列表项在 10 次尝试中有 7 次保持在第一位。我可以在许多其他项目中看到相同的情况。例如:第 5 项在 10 次尝试中有 5 次出现在第 3 位。通过这些观察,我可以看出 JS 代码在 IE 和 Firefox 中无法正常工作。(可能是由于引擎不同,不同浏览器对待JS代码的方式不同)
现在,我可以在 JS 代码中更改什么以使其在所有浏览器中都能正常工作吗?
或者是否有任何其他更好的排序算法可以在使用 JS 实现时在所有浏览器中进行不错的排序?
我知道我的第二个问题的一部分已在 SE 中的其他问题中得到解答,但我在这些问题中找不到“浏览器兼容性”部分。
感谢您的帮助。