IE jquery不允许iframe中的show()参数

时间:2011-07-28 17:43:24

标签: jquery internet-explorer iframe

我有这样的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方法。

任何想法出了什么问题,或者如何解决这个问题,都会非常感激。

1 个答案:

答案 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期望找到ATTRCHILDCLASStype。但它也找到了someCustomFunction。而someCustomFunction没有exec,因此它会失败。

现在的黑客修复只是为jquery引入一个空的exec方法来查找。例如

Object.prototype.someCustomFunction.exec = function( expr ) {}

从长远来看,我希望将someCustomFunction限制在实际需要的位置,而不仅仅是Object