4

以下代码行在 IE 中导致“JScript object expected”错误:

hideElements.apply(window, elements);

根据 IE 的说法,“预期的 JScript 对象”是指hideElements,这是一个将任意数量的 HTML 对象作为参数并隐藏它们的函数。

具体来说,我通过调用来检索 HTML 对象数组getElementsByTagName,并且我想将此数组作为参数列表传递给函数hideElements。JS 函数apply()正是我在这种情况下所需要的。我知道我当然可以用不同的方式编写我的代码,但是由于这在 Firefox 和 Chrome 上完美运行,并且在技术上是正确的,我真的很想知道为什么 IE 会卡在那里。

我已经确定,当该行执行时:

  • window不为 null 且类型为Window;
  • elements不为 null 且类型为HTMLCollection; 和
  • hideElements是一个功能齐全的 JS 函数(它自己完美地工作,并且在执行上面的代码时完全加载)。
4

1 回答 1

7

getElementsByTagName返回一个nodeListapply期望第二个参数是一个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));应该工作。

于 2012-06-20T05:51:24.963 回答