我有这段代码,它适用于所有浏览器和 IE9>,但在 IE8 中它会抛出我
JScript Object Expected
第一行 (Array.prototype...
)
this.items = Array.prototype.slice.call( document.querySelectorAll( '#' + this.el.id + ' > li' ) );
this.itemsCount = this.items.length;
this.itemsRenderedCount = 0;
this.didScroll = false;
我试着改变
document.querySelectorAll( '#' + this.el.id + ' > li' )
到
$(this).attr("id")
- 同样的错误。
但是当我将此行更改为简单的 jquery picker 时,例如 $("#someId")
,它工作正常。
有人有想法吗?
最佳答案
这是因为 IE8 及更低版本需要一个 native 对象作为内置数组方法的 this
值。您传递的集合是一个宿主对象。
您需要手动进行转换。
这是一个简单的例子:
function _slice(arr) {
try { // try using .slice()
return Array.prototype.slice.call(arr);
} catch(e) {
// otherwise, manually create the array
var result = [];
for (var i = 0; i < arr.length; ++i)
result.push(arr[i]);
return result;
}
}
this.items = _slice( document.querySelectorAll( '#' + this.el.id + ' > li' ) );
旁注,因为 this.el
必须是 ul
或 ol
元素,所以它的子元素必须是 li
元素,为什么不这样做呢?
this.items = _slice( this.el.children );
关于javascript - IE8 返回 'Object expected' 原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20977832/