Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE8返回';应为对象';原型_Javascript_Internet Explorer 8 - Fatal编程技术网

Javascript IE8返回';应为对象';原型

Javascript IE8返回';应为对象';原型,javascript,internet-explorer-8,Javascript,Internet Explorer 8,我有这段代码,它在所有浏览器和IE9>上都能很好地工作,但在IE8中它让我 JScript对象应位于第一行(Array.prototype…) 我试着换衣服 document.querySelectorAll('#'+this.el.id+'>li')to $(this.attr(“id”)-相同错误 但是,当我将这一行更改为简单的jquery选择器时,例如$(“#someId”),它工作得很好 有人知道吗?这是因为IE8和更低版本需要一个本机对象作为内置数组方法的值。正在传递的集合是主机对象

我有这段代码,它在所有浏览器和IE9>上都能很好地工作,但在IE8中它让我
JScript对象应位于第一行(
Array.prototype…

我试着换衣服
document.querySelectorAll('#'+this.el.id+'>li')
to
$(this.attr(“id”)
-相同错误

但是,当我将这一行更改为简单的jquery选择器时,例如
$(“#someId”)
,它工作得很好


有人知道吗?

这是因为IE8和更低版本需要一个本机对象作为内置数组方法的
值。正在传递的集合是主机对象

您需要手动进行转换

下面是一个简单的例子:

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.el
必须是
ul
ol
元素,那么它的子元素必须是
li
元素,为什么不这样做呢

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

由于IE8中同时支持QSA(仅限CSS2选择器)和slice,因此可能是错误的选择器,并且没有返回任何元素。
console.log('#'+this.el.id+'>li')
outputI检查了它,所有元素都存在(控制台日志返回:
#scroll-fade-effect1>li#scroll-fade-effect2>li#scroll-fade-effect3>li#scroll-fade-effect4>li
如果元素存在或不存在,则不会有任何区别。将始终返回集合。
this.items = _slice( document.querySelectorAll( '#' + this.el.id + ' > li' ) );
this.items = _slice( this.el.children );