2014-09-26 101 views
2

假设我们有一个包含5个项目的列表,并且我们想要将一些特定样式应用到第一个或最后一个孩子。但是这个列表的功能需要通过jQuery应用来隐藏它的一些项目(我们称之为.hide),它将设置目标项目上的display: none;选择:不包含某些特定类别的第一个孩子或最后一个孩子

特定风格我在一开始谈话应该只适用于第一和可见的最后一个项目,所以我想要做到的,是莫名其妙地跳过它应用了.hide类的那些在他们身上,并在同一时间的第一个或最后一个项目。

我已经试过通过组合一些:not(.hide):first-child/:last-child伪代码来做到这一点,但它不起作用。另外,尝试使用simbling选择器对于第一个孩子来说最多可以工作,但是现在没有办法在css中选择以前的兄弟,所以这个解决方案不会覆盖最后一个孩子的问题。

这里有一个jsfidle在这里你可以更好的理解我想要做的事:

http://jsfiddle.net/3wgxt1oL/

HTML

<div class="hide">Item 1</div> 
<div>Item 2</div> 
<div>Item 3</div> 
<div>Item 4</div> 
<div class="hide">Item 5</div> 

CSS

.hide {display: none;} 
div:not(.hide):first-child, 
div:not(.hide):last-child {color: red;} 
+1

请始终在问题上插入代码。如果jsfiddle失败,这个问题就失去了意义 – fcalderan 2014-09-26 11:05:27

+0

你使用的是JavaScript吗?您没有标记任何JS – 2014-09-26 11:05:30

+0

您可以使用'.detach'而不是'.hide' – Pete 2014-09-26 11:12:34

回答

3

如上所述,这对于CSS选择器是不可行的。究其原因有二:

既然你已经使用jQuery应用.hide类,你可以用它来另一个类适用于匹配:not(.hide)第一个和最后一个元素,然后针对那些其他类中的CSS。

1

你的意思是这样的吗?

var notHidden = $('div').not('.hide'); 
notHidden.first().css('color', 'red'); 
notHidden.last().css('color', 'red'); 
+0

是的,这样的。我忘记提到的是,我想知道这是否只能通过CSS来完成。我希望有机会使用':not'选择器来使其工作。 – 2014-09-26 11:29:18

+0

但是,CSS如何知道第一个还是最后一个元素? – iovis 2014-09-26 11:36:20

+0

你能否详细说明一下?那里有什么代码?如果它包含更多的OP信息,这个答案可能会很有用。 – rlemon 2014-09-26 14:23:53

0

您可以添加特定的风格,以第一个可见的孩子,像这样:

.hide {display: none;} 
div:not(.hide){ 
    color: red; 
} 
div:not(.hide) ~ div:not(.hide){ 
    color: black; /*reset everything to normal*/ 
} 

但是没有办法选择使用CSS最后一个可见子。为此,您需要使用javascript

+0

已经表示,使用兄弟姐妹将无济于事。 – 2014-09-26 12:45:02

相关问题