2012-02-09 8 views
6

divに特定の要素が含まれていても、条件をトリガするように見えない場合は、何かをしようとしています。ここに私のベストショットです。divに要素がないかどうかのテスト

<div class='test'> 
    testing123 
</div> 

<div class='test'> 
    <p>testing456</p> 
</div> 

$('.test').each(function(){ 
    if(!$(this).has('p')) { 
     $(this).addClass('red'); 
    } 
}); 

スクリプトは絶対にすべてをターゲットにしています。 $('p', $(this))は、現在の内部pのすべての要素を返しますので

if($('p', $(this)).length == 0) 

:あなたは要素型の不在を確認するために、次の条件を使用することができhttp://jsbin.com/igoyuk/edit#javascript,html,live

答えて

11

.has()は、ブール値ではなく、jQueryを返します。

.has(セレクタ)戻り値:jQueryの
説明:セレクタやDOM要素に一致する子孫を有するものにマッチした要素の集合を減らします。

Doing if(!$(this).has('p'))は、常にtrueです.jQueryは空の場合でも常にセットを返します。あなただけしなければならないので、

.has()は基本的に、それは時に呼び出されたセットをフィルタリング:

$('.test').has('p').addClass('red'); 
+0

いいです、どうすれば逆のことができますか?つまり、「持っていませんか?おかげで – SparrwHawk

+2

'$( '。test:not(:has(p))')' –

+0

これはうまくいきませんでした。 – SparrwHawk

3
if (!($(this).find('p').length > 0)) { 
    $(this).addClass('red'); 
} 
0

- ここ ライブフィドルです素子。

2

は、以下のものを使用して考えてみましょう:

$("div.test:has(p)").addClass("red"); 

これが唯一の選択、<div>要素のためのあなたのDOMを問い合わせますのテストをクラスに適用し、次に<p/>要素があるかどうかを調べます。そのより少し簡潔な=より少数のバイトは、ワイヤー上に行く。

関連する問題