Javascript IE8返回';应为对象';原型
我有这段代码,它在所有浏览器和IE9>上都能很好地工作,但在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和更低版本需要一个本机对象作为内置数组方法的值。正在传递的集合是主机对象
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 );