今天碰到了一个ie8兼容性的bug,Array使用indexOf()报错,先介绍下indexOf的用法:
1
| var indexVar = Array.indexOf(array, item, start);
|
搜索 Array 对象的指定元素并返回该元素的索引。
array: 要搜索的数组。
item: 要在数组中查找的对象。
startIndex:(可选)指定在数组中搜索的起始元素的索引号。
返回:
如果找到 item,则返回表示该元素在数组中的索引位置的编号;否则返回 -1。
在 Mozilla Firefox 中,如果调用 indexOf 时未设置 item 或将其设置为 undefined,则返回值为 undefined 的第一项的索引。 在同样的情况下,所有其他浏览器都返回 -1。
例如:
1 2 3 4 5 6 7
| var a = ['red', 'blue', 'green', 'blue']; var myFirstIndex = Array.indexOf(a, "blue"); // View the results: "1" alert("myFirstIndex: " + myFirstIndex); var mySecondIndex = Array.indexOf(a, "blue", (myFirstIndex + 1) ); // View the results: "3" alert("mySecondIndex: " + mySecondIndex);
|
这个方法在ie9以及其它浏览器上都是没有问题的
在网上找到的解决ie8的方法
1.在使用indexOf()方法之前,先执行一下下面这个方法。如果没有定义就先定义。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| //添加数组IndexOf方法 if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(elt /*, from*/) { var len = this.length >>> 0;
var from = Number(arguments[1]) || 0; from = (from < 0) ? Math.ceil(from) : Math.floor(from); if (from < 0) from += len;
for (; from < len; from++) { if (from in this && this[from] === elt) return from; } return -1; }; }
|
2.或者使用jquery的jQuery.inArray()来替换Array.prototype.indexOf
例如:
1 2
| var arr = [ 4, "Pete", 8, "John" ]; jQuery.inArray("John", arr); //3
|