我有这段代码,它在所有浏览器和IE9>上都很好,但是在IE8中,它在第一行(Array.prototype...)上抛出了JScript Object Expected。
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选择器(例如$("#someId") )时,它工作得很好。
有什么想法吗?
发布于 2014-01-07 17:29:04
这是因为IE8和lower需要一个本机对象作为内置数组方法的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 );https://stackoverflow.com/questions/20977832
复制相似问题