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

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

¿Cómo puedo aplicar jQuery a un elemento con la clase test solo si no contiene un elemento hijo con la clase example?Si el elemento padre no contiene cierto elemento hijo; jQuery

+0

posible duplicado de [Cómo seleccionar elementos que no tienen un elemento secundario específico con jQuery] (http://stackoverflow.com/questions/7258606/how-to-select-elements-which-do -not-have-a-specific-child-element-with-jquery) – Jeroen

Respuesta

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

-o-

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

¡Este funcionó mejor, gracias! – UserIsCorrupt

1

podría utilizar el método children con ".ejemplo" y prueba si está vacío

1

jQuery :

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

Posiblemente

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

Esta filtra cualquier elementos que tienen cualquier niño que coincida con .example. Si desea filtrar en función de los descendientes (no solo los niños), puede sustituir .find por .children.

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

¿Te gusta? No he probado esto ...

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

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

2

Este problema parece ya preparado para la función filter donde encontrará toda la .test objetos y luego al filtrar conservar solo los que no tienen .example en ellos:

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