IE Javascript错误“;对象没有';“不支持此属性或方法”;在jQuery中
出于某种原因,我在jquery.js(版本1.4.3,非压缩版本)的第3156行的Internet Explorer 8中遇到以下Javascript错误:IE Javascript错误“;对象没有';“不支持此属性或方法”;在jQuery中,javascript,jquery,internet-explorer,sizzle,Javascript,Jquery,Internet Explorer,Sizzle,出于某种原因,我在jquery.js(版本1.4.3,非压缩版本)的第3156行的Internet Explorer 8中遇到以下Javascript错误:对象不支持此属性或方法。Firefox和Google Chrome中没有出现错误 这是发生错误的行: if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { 调查(console.log(Expr.leftMatch[type]))
对象不支持此属性或方法
。Firefox和Google Chrome中没有出现错误
这是发生错误的行:
if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
调查(console.log(Expr.leftMatch[type])
)产生了以下有趣的结果:在谷歌浏览器中,它输出
/(^(?:.|\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中不存在引用的函数。有没有人知道为什么会发生这种情况,或者我能做些什么来解决它
不幸的是,我还没有能够创建一个简单的脚本来重现这个问题,尽管我确实找到了,但它并没有提供解决方案(上一篇文章建议该页面应该在标准模式下运行,但我的页面已经运行了)。事实证明,经过几个小时的痛苦之后,我自己设法解决了这个问题。如果您在别处定义了
Object.prototype.previousObject
,则Sizzle选择器引擎似乎会以这种意外的方式(仅在Internet Explorer中)中断
删除该声明,或者将previousObject
重命名为其他对象,可以解决此问题
有趣的是,我甚至自己把代码放在那里(Object.prototype.previousObject=[我问题中的函数]),但我没有认出代码
好吧,这又是一个浪费了大量开发潜力的日子。我发现,如果您试图向Object.prototype添加一个名为“inherited”的方法,即
Object.prototype.inherited=
它影响IE6、7和8,但在IE9(beta版)中似乎是固定的。在打印“leftMatch”条目时,“type”的值是多少?什么该错误消息对您来说不够具体吗-D(它几乎与“Undefined is not a function”错误消息一样有用);-)好吧,如果这是真的——Sizzle的内部表中有垃圾——那么某个地方出现了可怕的错误。@Pointy:很明显,但为什么?如何修复它?为什么它只发生在IE中?嗯,我想我从未见过这种情况发生,所以我不确定该怎么办。如果您使用的是IE8,则需要检查两种兼容模式:“浏览器模式”和“文档模式”。但听起来你很确定这一切都是正确的。