我有这样的JS代码:
var li = $("li[attribute=foo]");
if (li.length)
{
li.show("slow"); // Fails
}
我明白了:
Error: Object doesn't support this property or method
没有参数的 show()
有效。
fadeIn()
或scrollUp()
相同。我还注意到closest()
在另一个元素上失败了。所有这些都可以在Firefox中使用。
我怀疑这是因为有问题的内容在iframe中(jquery本身包含在外部页面中),但是iframe中的所有其他jquery都可以工作,并且从IE调试器的角度来看,li存在并且有一个带参数的show方法。
任何想法出了什么问题,或者如何解决这个问题,都会非常感激。
答案 0 :(得分:1)
根据上面的评论,这与jquery或iframe的版本无关,但是因为我的页面上有一些JS的形式:
Object.prototype.someCustomFunction = function( aObjects ) { ...}
值得分享我如何解决这个问题,以防万一。秘诀是得到jquery的完整版本,而不是混淆和压缩的版本,所以我可以更轻松地调试jquery中出错的地方。
我发现在Sizzle.filter
中,jquery迭代如此:
for ( var type in Expr.filter ) {
if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
...
}
}
重点是jquery期望找到ATTR
,CHILD
,CLASS
等type
。但它也找到了someCustomFunction
。而someCustomFunction
没有exec
,因此它会失败。
现在的黑客修复只是为jquery引入一个空的exec
方法来查找。例如
Object.prototype.someCustomFunction.exec = function( expr ) {}
从长远来看,我希望将someCustomFunction
限制在实际需要的位置,而不仅仅是Object
。