IE8返回'Object expected'原型

时间:2014-01-07 17:17:56

标签: javascript internet-explorer-8

我有这个代码,适用于所有浏览器和IE9> ,但在IE8中,它抛出了我 {1} 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选择器时,例如$("#someId"),它可以正常工作。

想点什么?

1 个答案:

答案 0 :(得分:1)

这是因为IE8及更低版本需要本机对象作为内置Array方法的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必须是ulol元素,因此其子元素必须是li元素,为什么不这样做?

this.items = _slice( this.el.children );