IE Javascript错误"对象不支持此属性或方法"在jQuery中

Ais*_*ina 7 javascript jquery internet-explorer sizzle

出于某种原因,我在jquery.js(版本1.4.3,非压缩版本)的第3156行的Internet Explorer 8中收到以下Javascript错误:Object doesn't support this property or method.Firefox和谷歌浏览器中没有错误.

这是错误发生的行:

if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
Run Code Online (Sandbox Code Playgroud)

Investigation(console.log(Expr.leftMatch[type]))产生以下有趣结果:在谷歌浏览器中输出

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

但是在Internet Explorer中,这是输出:

function() {
  var p = this;
  do p = p.previousSibling;
  while (p && p.nodeType != 1);
  return p;
}
Run Code Online (Sandbox Code Playgroud)

其中exec无法调用(未定义).jquery.js中不存在引用的函数.有没有人知道为什么会发生这种情况,或者我能做些什么来解决它?

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

Ais*_*ina 8

事实证明,经过几个痛苦的小时后,我成功地自己解决了这个问题.如果您已Object.prototype.previousObject在其他地方定义,则Sizzle选择器引擎会以此意外方式(并且仅在Internet Explorer中)中断.

删除该声明,或重命名previousObject为其他东西可以解决问题.

有趣的是,我甚至把那些代码放在那里(Object.prototype.previousObject = [the function in my question]),但我没有认出代码.

那是另一天充满了发展潜力的浪费.

  • 经验教训,不要乱用Object的protoype (2认同)