アイテムのリストをランダム化するために、このコードをWebサイトから入手しました。[これは、ユーザーが新たに訪問するたびに曲(リスト)をランダム化する音楽プレーヤー用です。したがって、過去の訪問で聞いたのと同じ曲から始めて退屈することはありません]
$(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を使用して実装した場合に、すべてのブラウザーで適切な並べ替えを行う、他のより優れた並べ替えアルゴリズムはありますか?
2番目の質問の一部がSE内の他の質問で回答されていることは理解していますが、それらの質問の「ブラウザーの互換性」の部分については見つかりませんでした。
助けてくれてありがとう。