tengo el siguiente código.
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
</head>
<div id="hello">Hello <div>Child-Of-Hello</div></div>
<br />
<div id="goodbye">Goodbye <div>Child-Of-Goodbye</div></div>
<script type="text/javascript">
<!--
function fun(evt) {
var target = $(evt.target);
if ($('div#hello').parents(target).length) {
alert('Your clicked element is having div#hello as parent');
}
}
$(document).bind('click', fun);
-->
</script>
</html>
Espero que solo cuando Child-Of-Hello
se $('div#hello').parents(target).length
haga clic en él, vuelva> 0.
Sin embargo, simplemente sucede cada vez que hago clic en cualquier lugar.
¿Hay algún problema con mi código?
javascript
jquery
Cheok Yan Cheng
fuente
fuente
.has()
parece estar diseñado para este propósito. Dado que devuelve un objeto jQuery, también debe probar.length
:fuente
target
está dentro de él.Vainilla 1 línea para IE8 +:
Aquí, cómo funciona:
fuente
Si tiene un elemento que no tiene un selector específico y aún desea verificar si es descendiente de otro elemento, puede usar jQuery.contains ()
Puede pasar el elemento padre y el elemento que desea verificar a esa función y devuelve si el último es descendiente del primero.
fuente
$.contains
tomar elementos DOM y no instancias de jQuery, o siempre devolverá falso.$.contains
nunca devuelve verdadero si los dos argumentos son el mismo elemento. Si quieres eso, usadomElement.contains(domElement)
.Terminó usando .closest () en su lugar.
fuente
Puede hacer que su código funcione simplemente intercambiando los dos términos:
Tuviste al niño y al padre al revés.
fuente
var target = $(evt.target);
por lo que su código debe leerif (target.parents('div#hello').length) {
y no...$(target)...
Además de las otras respuestas, puede usar este método menos conocido para tomar elementos de un determinado padre así,
En tu caso, eso sería
Tenga en cuenta el uso de comas entre el niño y el padre y sus comillas separadas. Si estuvieran rodeados por las mismas citas
tendría un objeto que contiene ambos objetos, independientemente de si existen en sus árboles de documentos.
fuente