今天在IE7中发现jQuery的一个非常奇怪的问题,它没有在元素中正确地找到选择器。这是HTML代码:
<DIV id=firstVideoWrap>
<OBJECT style="FLOAT: left" id=firstVideo width=300 height=300>
<PARAM NAME="allowfullscreen" VALUE="true" />
<PARAM NAME="movie" VALUE="http://vimeo.com/">
</OBJECT>
</DIV>
<DIV id=secondVideoWrap>
<OBJECT style="FLOAT: left" id=secondVideo width=300 height=300>
<PARAM NAME="allowscriptaccess" VALUE="always" />
<PARAM NAME="movie" VALUE=http://vimeo.com/moogaloop.swf />
<PARAM NAME="wmode" VALUE="opaque" />
</OBJECT>
</DIV>
和相关的javascript:
console.log(jQuery("#firstVideo param").length);
console.log(jQuery("#firstVideoWrap param").length);
console.log(jQuery("#secondVideo param").length);
console.log(jQuery("#secondVideoWrap param").length);
它给出了输出:
5
2
5
3
这是JSFiddle:http://jsfiddle.net/uGpUy/2/
似乎IE不计算对象上的参数数量,而是计算整个页面上的所有参数。当我使用包装div时,它会正确计算它们。
如果我这样做:
jQuery("#secondVideo > param").length
它正常工作。
这是一个jQuery错误还是我的代码中出错了?
编辑:我已经为此提交了一个jQuery错误票:http://bugs.jquery.com/ticket/11646,将会看到它是如何进展的。
答案 0 :(得分:1)
它看起来是与<OBJECT />
标记相关的错误。如果您将<OBJECT />
代码替换为<DIV />
代码,it works just as you intended:
2
2
3
3
<OBJECT />
选择器上使用I did get it to work
console.log(jQuery("#firstVideo").children("param").length);
console.log(jQuery("#firstVideoWrap param").length);
console.log(jQuery("#secondVideo").children("param").length);
console.log(jQuery("#secondVideoWrap param").length);
<强>输出:强>
2
2
3
3
另一个注意事项:
该错误似乎在.find()
方法中,而when I tried to use that代替.children()
返回:
5
2
5
3
答案 1 :(得分:0)
更重要的是,在IE8中,所有四个长度都为0.使用jQuery("#secondVideo > param")
也会产生0 ......不知道为什么会发生这种情况。