2012-04-12 46 views
2

我有一个".hidden"类,我实时构建DOM元素。所以,我得到一个简单的代码,如:元素:小孩部队重新评估

... 
    <div class="hidden">1</div> 
    <div class="hidden">2</div> 
    <div class="hidden">3</div> 
... 

我的CSS定义简单多了:

.hidden { 
display: none; 
} 

.hidden:first-child { 
display: block; 
} 

一切都很好皆大欢喜。现在,如果我执行如下操作:$('.hidden:first-child').remove()它将被删除,但是下一个元素不会出现。它似乎只在我点击开发者控制台中的DOM节点时出现(ctrl + shift + i in chrome)。

想法如何强制浏览器评估CSS规则?

UPDATE 这是一个jsFiddle test case。一旦点击了按钮,你会看到“0”,没有其他的数字,它应该是“1”,然后是“2”,依此类推。

结论: 奇怪,但如果我删除之前删除淡出(400)()它的工作原理。

+3

是否能重现测试用例?我相信,只要DOM发生变化,浏览器就会重新评估CSS。 – BoltClock 2012-04-12 13:52:08

+0

@Sven Bieder:这并不重要,因为':first-child'看着一个元素,而不是它的内容。第一个'.hidden'元素仍然是第一个孩子(假设所有这些元素都有这个类) - 删除它,第二个应该成为第一个。 – BoltClock 2012-04-12 13:55:10

+1

http://jsfiddle.net/umt3q/正常工作 – jAndy 2012-04-12 13:55:48

回答

2

尝试使用CSS伪类:第一的类型,而不是:第一胎

这里是一个的jsfiddle工作示例:http://jsfiddle.net/jukDU/3/

+0

Hell yes,This works!谢谢! – 2012-04-12 14:00:26

+0

奇怪,为什么':第一种类型'会在Chrome上运行,但不是':first-child',但是...必须是它的另一个漏洞。 – BoltClock 2012-04-12 14:01:28

+0

@ BoltClock的独角兽我确定这不是一个错误,但即使是被斥责的jsFiddle也不适合我的第一个孩子。通过我的生活第一个孩子直到现在没有让我失望:) – 2012-04-12 14:03:40

0

我会先显示下一个项目,然后将其删除。

$('.hidden:first-child').next().show(); 
$('.hidden:first-child').remove(); 
+0

很好的答案,但是对于电子邮件看起来有点不自然 – 2012-04-12 13:58:24