2012-08-30 12 views
11

可能性の重複:
Is there a CSS parent selector?CSSの "haschildren"セレクタはありますか?

私は子要素が存在する場合にのみ使用することができるCSSセレクタはありますか?

は考えてみましょう:

<div> <ul> <li></li> </ul> </div> 

私はそれが少なくとも一つの子<li>要素を持っていない場合にのみDIVするdisplay:noneを適用したいと思います。

私はこれを使用できますか?

+1

CSSを使用した可能性が、可能ではない別のオプションがあります非常にコンパクトなので、この1つは最もです。私は、jQuery( 'navbar-inner:not(:has(ul li))')のようなセレクタと一緒に使用しました。css( 'display'、 'none'); – Ibu

答えて

10

いいえ、残念ながら、それはCSSセレクタでは不可能です。

+1

はここではいくつかの背景情報だと – Typoheads

16

並べ替えを:emptyと限定していますが、制限されています。

例:http://jsfiddle.net/Ky4dA/3/

でもテキストノードはそうDIV内部ULが一致しているからDIVを続けるだろう、親が空であるとみなされないようになります。

<h1>Original</h1> 
<div><ul><li>An item</li></ul></div> 

<h1>No Children - Match</h1> 
<div></div> 

<h1>Has a Child - No Match</h1> 
<div><ul></ul></div> 

<h1>Has Text - No Match</h1> 
<div>text</div> 

DIV { 
background-color: red; 
height: 20px;  
} 

DIV:empty { 
background-color: green; 
} 

参考:スクリプトルート行けばhttp://www.w3.org/TR/selectors/#empty-pseudo

:もちろん

// pure JS solution 
​var divs = document.getElementsByTagName("div"); 
for(var i = 0; i < divs.length; i++){ 
    if(divs[i].childNodes.length == 0){ // or whatever condition makes sense 
     divs[i].style.display = "none"; 
    }   
}​ 

を、jQueryのは、これを簡単のような作業を行いますが、この一つのタスクには、するのに十分な正当化ではありません全体の図書館。

3

CSSには残念なことに親ルールはありません。それを適用する必要がある場合は、特定の子を含む親だけがJavascriptを使用するか、より簡単にjQueryというjavascriptのライブラリを使用します。

Javascriptがあなたの例のために私たちはHTMLページの一番下にこのような何かをするだろう、somewaysにCSSにsimilairな方法で記述することができ

:あなたは含める必要があり、このために(

<script type="text/javascript"> 
    $('div:has(ul li)').css("color","red"); 
</script> 

あなたはjqueryの使用している場合は、ドキュメント内のjQueryライブラリは、単にあなたの<head></head>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script> 
+0

私は言っています:JavaScriptの –

2

に次のように置くことによって、あなたは

この機能を試してみることができますhttps://css-tricks.com/parent-selectors-in-css/
2

$('div ul').each(function(x,r) { 
    if ($(r).find('li').length < 1){ 
     $(r).css('display','block'); // set display none 
    } 
})