jQuery伪选择器“:不是”IE7无法正常工作?

时间:2011-02-24 16:46:07

标签: javascript jquery css internet-explorer

在IE 7中使用Firebug Lite,使用jQuery 1.4.4。我试图抓住所有不是第一个的“.step”<div/>元素(现在有2个或3个,但假设有任意数量的步骤)。在FF和Webkit中工作,但注意到:not:first相同的选择器不会在IE7中选择相同的项目。 jQuery bug?这有用吗?你能建议另一种选择这些项目的方法吗?

# Firebug Lite console
>>> $('.step')
[div#step_1.step, div#step_2.step, div#step_3.step]
>>> $('.step:first')
[div#step_1.step]
>>> $('.step:not(:first)')
[div#step_1.step, div#step_2.step, div#step_3.step]

3 个答案:

答案 0 :(得分:3)

这不是IE7问题的答案,但它是一种解决方法,可能是更好的整体方法。

而不是:

$('.step:not(:first)')

这样做:

$('.step').slice(1);

现在你正在使用一个对querySelectorAll有效的简单选择器,只是简单地将其削减到除第一场比赛之外的所有选择。

总的来说,它应该对你有好处。


修改

在IE 7中似乎存在关于:not(:first)的开放式错误。

以下是链接:http://bugs.jquery.com/ticket/4028

答案 1 :(得分:0)

您可以使用

$('.step:gt(0)')

目前没有IE7方便测试

答案 2 :(得分:0)

为了便于阅读,建议使用.not()方法而不是jQuery documentation中的非伪类选择器,但是:不会产生可怕的性能影响。在许多情况下,省略标记名也可以。在IE8中进行测试,我发现.not()方法比:非伪类选择器快三十四倍。

我同意user113716的说法.slice方法在这里可能是最好的,但对于那些遇到问题的人:不是在类似的情况下,我会建议这样的事情:

$('div.step').not('div:first')