2012-02-09 5 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 모든 요소를 ​​반환합니다

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

$('p', $(this)) 이후 : http://jsbin.com/igoyuk/edit#javascript,html,live

답변

11

.has()은 jQuery이 아니라 부울 값을 반환합니다.

.has (선택기) 결과 : jQuery를
설명 : 선택기 또는 DOM 요소와 일치하는 자손을 갖도록 것과 유사한 요소의 세트를 감소시킨다.

Doing if(!$(this).has('p'))은 항상 true입니다. jQuery는 항상 비어 있더라도 세트를 반환합니다.

.has() 기본적으로이시 호출되는 세트를 필터링, 그래서 당신은 할 필요가 :

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

이것은 <div> 요소에 대한 귀하의 DOM을 조회, 선택의 경우 :

$('.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

는 다음 사용을 고려 시험을 클래스로 수행 한 다음 <p/> 요소가 있는지 확인합니다. 그것의 조금 더 간결한 = 적은 바이트가 전선을 통해가는.

관련 문제