2010-10-18 8 views

Respuesta

66
if($(target).parents('.wrapper').length > 0) { 
    //do something... 
} 
+0

pequeña modificación en lugar de $ (objetivo) utiliza $ (este) como destino contiene cadena. –

+1

Tenga en cuenta que esto prueba que el objetivo es un elemento directo del contenedor. – cherouvim

+0

@Chinmayee, el 'href' apunta al' id' real del elemento que el OP desea verificar, no 'this'. –

32

.has() es tal vez el Mose sintaxis conveniente:

if($('.wrapper').has($(target))) { 
    // do something 
} 

Aún más "potente" (en términos de rendimiento) es $.contains(). Así que un algoritmo ideal debería parecerse a:

var $wrapper = $('.wrapper'), 
    $target = $(this).attr('href'); 

if($.contains($wrapper[0], $target[0])) { 
    // do something 
} 

Referencia: .has(), $.contains()

+4

+1 por '$.contains() 'que la API de jQuery describe explícitamente como" Verificar para ver si un elemento DOM es un descendiente de otro elemento DOM ". – gfullam

+2

No recomendaría el uso de '.has()' como se describe, porque no devuelve un booleano como es de esperar. En cambio, filtra el conjunto original de elementos DOM y devuelve un nuevo objeto jQuery. ("Descripción: reduzca el conjunto de elementos coincidentes a aquellos que tienen un descendiente que coincida con el selector o el elemento DOM"). Aunque en este caso, _sea_ produce el resultado correcto, creo que el valor de retorno no es intuitivo y puede causarle dolores de cabeza si asumes que devuelve un booleano. –

0

No puedes obligar a otro evento? .

$('.wrapper *').click(function() { 
    // will execute on childrens of .wrapper 
}); 
2

pequeño cambio en el código de Jacob, si el niño es más profundo que un nivel en

if($(target).parents('.wrapper').length) { 
    //do something... 
} 
3

Aquí está una manera más ordenada: se unen como un plugin de jQuery. Es posible que le resulte más fácil de entender y usar.

$.fn.isChildOf = function(element) 
{ 
    return $(element).has(this).length > 0; 
} 

Uso:

if ($('.target').isChildOf('.wrapper')) { 
     //do all the things. 
    } 
0

Sé que esto es antiguo puesto, pero podría ser útil para alguien. Me parece que en muchos casos el uso de .closest() tendría un mejor rendimiento:

if ($(target).closest('.wrapper').length){ 
    // your code here 
} 
1
<div class="parent"> 
    <div class="child"> 
    </div> 
</div> 


$(".child").is(".parent .child") 
+1

cuál es el contexto de esta respuesta, parece una copia de código pegada desde algún lugar. ¿Puedes ampliarlo con alguna introducción o descripción que pueda ser? – Farside

+0

Si bien este código puede responder a la pregunta, proporcionar un contexto adicional con respecto a * cómo * y/o * por qué * resuelve el problema mejoraría el valor a largo plazo de la respuesta. - [De la crítica] (http://stackoverflow.com/review/low-quality-posts/13223379) –

Cuestiones relacionadas