2011-08-04 10 views
4

divに特定のクラス名の子divがない場合、divを非表示にすることはできますか?css div divにクラスの子がない場合

<div class="parent"> 
This div must be hidden 
</div> 

<div class="parent"> 
This div must be visible 
<div class="child"> 
child div 
</div> 
</div> 

JavaScriptでできない場合は、javascriptまたはjQueryを使用してください。

+0

いいえ、子divも非表示になります。なぜあなたはこれをしたいのですか? – Drewid

+1

私はあなただけのCSSでこれを行うことができるとは思わない。しかし、あなたはJavaScriptを使ってそれを行うことができます。 – Shef

+0

'のようなものを探していますif(.parentと.parentは.childを持っています)this.parentを非表示にします(他の親ではありません)。できればcssでやってしまったり、.parentに子がある場合はクラス名を追加してください。 – FLY

答えて

6

これはCSSだけでは不可能だと思いますが、Javascriptでは間違いなく可能です。クラスparent
を持つすべてのdivを見つける - - クラスchild
と子のdivを持つすべてのそれらを見つける -
にあなたが持っている

そのような子が存在しない場合は、純粋で、今style.display = none

を設定javascriptこれはちょっと複雑かもしれません。あなたthis questionからgetElementsByClassNameを使用して、上記のロジック適用することができます。jQuery

//getElementsByClassName from @CMS's answer to the linked question 
var parentDivs = getElementsByClassName(document, "parent"); 
for(var i=0; i<parentDivs.length; i++) 
{ 
    var children = getElementsByClassName(parentDivs[i], "child"); 
    if(!children || children.length == 0) 
    { 
     parentDivs[i].style.display = "none"; 
    } 
} 

を、これは多くの簡単です:

$(".parent").each(function() 
{ 
    if($(this).children(".child").length == 0) 
    { 
     $(this).hide(); 
    } 
}); 

ライブ例:http://jsfiddle.net/nivas/JWa9r/

+0

thnx。私はさらにいくつかの研究をして、別の方法でそれをやろうとしました(すべての親アイテムを隠し、子を持つ親だけを表示することによって)。しかし、私はあなたが親アイテムを選択するためにCSSセレクターを使うことはできないと結論づけなければなりません。要素自体または死亡児のみを選択することができます。 – FLY

12

CSS3のので、あなたがすることができます:空のセレクタを使います。このメソッドは、現代のすべてのブラウザで広くサポートされており、javascriptの代替よりもはるかに高速です。

+1

しかし、 '.parent'の中に何らかのテキスト(スペースや改行を含む)があれば、':empty'は失敗します。 –

関連する問題