以下代码行导致IE中出现“预期的JScript对象”错误:
hideElements.apply(window, elements);
根据IE,“预期的JScript对象”是指hideElements
,它是一个将任意数量的HTML对象作为参数并隐藏它们的函数。
具体来说,我通过调用getElementsByTagName
来检索HTML对象数组,并且我希望将此数组作为函数hideElements
的参数列表传递。 JS函数apply()
正是我在这种情况下所需要的。我知道我肯定会以不同的方式编写我的代码,但由于这在Firefox和Chrome上完美运行,并且在技术上是正确的,我真的很想知道为什么IE卡在那里。
我确定,当执行该行时:
window
不为null且类型为Window
; elements
不为null且类型为HTMLCollection
;和hideElements
是一个功能齐全的JS函数(它可以完全独立运行,并且在执行上面的代码时完全加载)。答案 0 :(得分:7)
getElementsByTagName
返回nodeList
。 apply
期望第二个参数为array
。如果将elements
转换为真实数组(使用循环),它应该可以工作。
注意:在IE< 9中,不可能使用Array.prototype.slice.call(elements)
,因此循环是创建数组最安全的方法,如:
function nodeList2Array(nodes){
var arr = [];
for (var i=1; i<nodes.length;(i+=1)){
arr.push(nodes[i]);
}
return arr;
}
现在:hideElements.apply(window, nodeList2Array(elements));
应该有用。