2013-01-24 69 views
3

如果我想这样的名单上做了CSS选择器:选择具有特定孩子的元素?

<ul> 
    <li></li> 
    <li><a></a></li> 
    <li><a></a></li> 
    <li><a></a></li> 
</ul> 

,我想要做的只包含一个<a>标签lili:hover效果,有没有指定的方式CSS? if li:hover contains <a> then li:hover effect = X?

+2

CSS不允许你“达到回”向上级联链基于儿童改变父母的布局。 –

+0

[复杂的CSS选择器为父活动子]的可能的副本(http://stackoverflow.com/questions/45004/complex-css-selector-for-parent-of-active-child) –

+0

请参阅https:// stackoverflow .com/questions/1014861/is-there-a-css-parent-selector –

回答

5

不,CSS不允许你根据他们的后代选择元素。

1

你可以做到这jQuery中:

$("a").parent("li").css("color","#923123"); 

对你的要求是什么,这将是这样的:

$("li").mouseover(function(){ 

    if ($(this).is(':parent')) 
    { 
     //this <li> has a child, supposed to be <a> 
    } 

}); 
0

根据您的最终目标,什么效果,你可以申请样式到锚标签 - 然后不适用于那些没有标签的列表项。

或者,虽然您不能直接在CSS中执行此操作,但如果列表是动态的,并且您可以识别在生成点包含链接的列表项,则可以根据相应的状态和样式应用类。

如果它不是一个动态列表,只需手动添加类。

+0

好的,谢谢。我想也许用新的CSS选择器类型有一种方法可以在CSS中实现,但我想我必须等待CSS4:P – proseidon

0

为此,您需要一个CSS4父级选择器,但当然现在不支持。

$li:hover a { ... } 

如果不要紧就是标签中,你可以只使用:

li:hover {border:1px solid red} 
li:empty:hover {border:0} 

:空的选择是不是在IE7支持。

http://jsfiddle.net/aD6Ws/

jQuery的替代方法是:

$("li:has('a')").hover(function() { ... },function(){ ... }) 
相关问题