dataset
в IE не определен. Вероятно, это главный источник проблемы. Все остальное отлично работает на 64-разрядной версии IE9.
Вы можете просто сохранить это состояние локально в JS:
for (var i = 0; i < buttons.length; i++)
register( i )
function register( i ){
button = buttons[i];
button.onclick = function() {
changeBGImage(i);
};
}
Или вы можете выполнить поиск
for (var i = 0; i < buttons.length; i++)
button = buttons[i];
button.onclick = function() {
changeBGImage(this.getAttribute('data-index'));
};
}
Де-факто беспристрастным алгоритмом перетасовки является алгоритм Фишера-Ятса (он же Knuth) Shuffle.
См. https://github.com/coolaj86/knuth-shuffle
Вы можете увидеть отличную визуализацию здесь (а оригинальный пост связан с этим)
function shuffle(array) { var currentIndex = array.length, temporaryValue, randomIndex; // Пока остаются элементы для перетасовки. ... while (0 !== currentIndex) { // Выбираем оставшийся элемент... randomIndex = Math.floor(Math.random() * currentIndex); currentIndex -= 1; // И меняем его местами с текущим элементом. temporaryValue = array[currentIndex]; array[currentIndex] = array[randomIndex]; array[randomIndex] = temporaryValue; } return array; } // Используется так var arr = [2, 11, 37, 42]; arr = shuffle(arr); console.log(arr);
Еще немного информации об используемом алгоритме.