Jeśli kiedykolwiek pracowaliście z tablicami w javascript to pewnie natrafiliście na ten problem. Ja dopiero ostatnio natknąłem się na niego w trakcie jednego z projektów. Chyba pierwszy raz zacząłem korzystać po prostu z metody indexOf w tablicach, albo już zapomniałem, że kiedyś to robiłem.
Problem polega na tym, że IE < 9 nie implementuje w całości standardu ECMAScript – nie tylko indexOf nie jest zaimplementowany ale także forEach i pewnie inne metody. Każda próba wywołania takiej metody skończy się na wyjątku :(
By rozwiązać problem wystarczy wykorzystać następujący fragment kodu:
// fixing STUPID MICROSOFT IE ISSUE with indexOf if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(obj, start) { for (var i = (start || 0), j = this.length; i < j; i++) { if (this[i] === obj) { return i; } } return -1; }; }
autor: Internet :)
Sposób wykorzystania tak jak specyfikacja mówi:
var tab = [2, 5, 9]; var indexOf1 = tab.indexOf(9); var indexOf2 = tab.indexOf(9, 1); // start from index 1 var indexOf3 = Array.prototype.indexOf.call(tab, 9);
Teraz już IE nie będzie się pluł :)
PS.: na Mozzila Developer Network można znaleźć inną implementację.