IE 6中的<object>元素的jQuery Selector Bug 7?或者我错过了什么</object>

时间:2012-04-25 15:06:09

标签: jquery jquery-selectors internet-explorer-7 internet-explorer-6

今天在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,将会看到它是如何进展的。

2 个答案:

答案 0 :(得分:1)

它看起来是与<OBJECT />标记相关的错误。如果您将<OBJECT />代码替换为<DIV />代码,it works just as you intended

2
2
3
3

<OBJECT />选择器上使用I did get it to work

.children()

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 ......不知道为什么会发生这种情况。