7

出于某种原因,我在 jquery.js(版本 1.4.3,非压缩版本)的第 3156 行的 Internet Explorer 8 中收到以下 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 中不存在。有谁知道为什么会发生这种情况,或者我能做些什么来解决它?

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

4

3 回答 3

8

事实证明,经过几个小时的痛苦,我自己设法解决了这个问题。如果您在Object.prototype.previousObject其他地方进行了定义,那么 Sizzle 选择器引擎似乎会以这种意想不到的方式中断(并且仅在 Internet Explorer 中)。

删除该声明,或重命名previousObject为其他内容可以解决问题。

有趣的是,我什至自己把那个代码放在那里(the Object.prototype.previousObject = [the function in my question]),但我不认识这个代码。

好吧,这又是浪费了开发潜力的一天。

于 2010-10-19T13:53:21.720 回答
3

我发现如果您尝试向 Object.prototype 添加一个名为“inherited”的方法,也会发生相同的行为,即Object.prototype.inherited = <some func>

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

于 2010-12-06T14:51:45.337 回答
0

可能为时已晚,但我遇到了同样的问题,并通过使用纯 java 脚本而不是 jquery 选择元素来解决!

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

这有点工作原理!

于 2021-11-15T13:37:06.120 回答