IE JavaScript错误:“对象不支持此属性或方法”,位于jQuery内部。

7

由于某种原因,在Internet Explorer 8中,jquery.js(版本1.4.3,非压缩版本)的3156行出现以下Javascript错误:Object doesn't support this property or method。而在Firefox和Google Chrome中没有出现任何错误。

错误发生在以下这一行:

if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {

调查 (console.log(Expr.leftMatch[type])) 产生了以下有趣的结果:在Google Chrome中,它输出

/(^(?:.|\r|\n)*?):((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\3\))?(?![^\[]*\])(?![^\(]*\))/

然而在Internet Explorer中,输出结果如下:
function() {
  var p = this;
  do p = p.previousSibling;
  while (p && p.nodeType != 1);
  return p;
}

在哪里无法调用exec(它未定义)。引用的函数不在jquery.js中。有人知道为什么会发生这种情况,或者我该怎么做才能解决它吗?

不幸的是,我还没有能够创建一个简单的脚本来重现这个问题,虽然我找到了这篇帖子,里面有人遇到了同样的问题,但它并没有提供解决方案(最后一篇建议在标准模式下运行页面,但我的已经是标准模式了)。


在您打印“leftMatch”条目时,“type”的值是多少? - Pointy
什么?- 这个错误信息不够具体吗?:-D(它几乎和“未定义的函数”错误信息一样有用);-) - scunliffe
如果这是真的 - Sizzle内部表中有垃圾数据 - 那么某个地方出了严重问题。 - Pointy
@Pointy:显然,但是为什么呢?如何解决?为什么只在IE中发生? - Aistina
嗯,我不认为我曾经见过这种情况发生,所以我不确定该怎么办。如果您正在使用IE8,则有两个兼容模式需要检查:“浏览器模式”和“文档模式”。但是听起来您相当确定那一切都是正确的。 - Pointy
@Pointy:哇,太棒了。我马上会发布出错的内容。 - Aistina
3个回答

8
事实证明,在经历了几个痛苦的小时后,我设法自己解决了这个问题。如果您在其他地方定义了Object.prototype.previousObject,则Sizzle选择器引擎会以这种意想不到的方式(仅在Internet Explorer中)出现错误。
删除该声明或将previousObject重命名为其他名称可修复该问题。
有趣的是,那段代码我甚至是自己放进去的(Object.prototype.previousObject = [我提问中的函数]),但我没有认出来。
好吧,又是一天浪费了很多开发潜力。

3

如果您尝试将名为“inherited”的方法添加到Object.prototype中,例如Object.prototype.inherited = <some func>,则会出现相同的行为。

它影响IE6、7和8,但似乎在IE9(beta版)中已经修复。


0

可能回复有点晚了,但我遇到了同样的问题,并通过使用纯JavaScript选择元素来解决了它,而不是使用jQuery!

  var div = document.getElementById("myDiv");
  var rect = div.getBoundingClientRect();

这种方式可以工作!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接