2012-04-16 21 views
15
<div class="test"> 
<div class="example"></div> 
</div> 

<div class="test"> 
</div> 

Jak zastosować jQuery do elementu z klasą test tylko wtedy, gdy nie zawiera elementu podrzędnego z klasą example?Jeśli element nadrzędny nie zawiera określonego elementu potomnego; jQuery

+0

możliwe duplikat [Jak wybrać elementy, które nie mają konkretny element podrzędny z jQuery] (http://stackoverflow.com/questions/7258606/how-to-select-elements-which-do -nie-masz-specyficzny-element-dziecka-z-jquery) – Jeroen

Odpowiedz

31
$('.test:not(:has(.example))') 

-lub-

$('.test').not(':has(.example)') 
+0

Ten działał najlepiej, dziękuję! – UserIsCorrupt

1

Można użyć metody children z ".example" i testu, jeśli jest pusty

1

jQuery :

jQuery.contains(document.documentElement, document.body); // true 
jQuery.contains(document.body, document.documentElement); // false 
4

Ewentualnie

$('.test').filter(function() { return !$(this).children('.example').length; }); 

ten odfiltrowuje wszelkie elementy, które mają każde dziecko pasujące do .example. Jeśli chcesz filtrować na podstawie potomków (nie tylko dzieci), możesz zastąpić .find dla .children.

1
$('.test').each(function() { 
    if(!$(this).children().hasClass("example")){ 
     //your code 
    } 
}); 

Może tak? Nie testowałem tego ...

2
$(':not(.test:has(.example))').css('color', 'red');​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 

http://jsfiddle.net/DZZUZ/2/

2

Problem ten wydaje się gotowy do pełnienia funkcji filter gdzie można znaleźć wszystkie .test Obiekty, a następnie podczas filtrowania zachowują tylko te, które nie mają w sobie .example:

$(".test").filter(function() { 
    return($(this).find(".example").length == 0); 
}); 
-1
if ($('#yourDiv').children().hasClass("className")) { 
    // yourDivID' has any children whose class name =>'className' 
} 
Powiązane problemy