Eu tenho o seguinte 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 apenas quando Child-Of-Hello
for clicado, $('div#hello').parents(target).length
retornará> 0.
No entanto, isso acontece sempre que clico em qualquer lugar.
Há algo errado com meu código?
javascript
jquery
Cheok Yan Cheng
fonte
fonte
.has()
parece ter sido projetado para esse fim. Como ele retorna um objeto jQuery, você também deve testar.length
:fonte
target
está dentro dele.Vanilla 1-liner para IE8 +:
Veja como funciona:
fonte
Se você tem um elemento que não tem um seletor específico e ainda deseja verificar se é descendente de outro elemento, você pode usar jQuery.contains ()
Você pode passar o elemento pai e o elemento que deseja verificar para essa função e ela retorna se o último for um descendente do primeiro.
fonte
$.contains
pegar elementos DOM e não instâncias jQuery, ou sempre retornará falso.$.contains
nunca retorna verdadeiro se os dois argumentos são o mesmo elemento. Se você quiser isso, usedomElement.contains(domElement)
.Acabou usando .closest ().
fonte
Você pode fazer seu código funcionar apenas trocando os dois termos:
Você enganou o filho e o pai.
fonte
var target = $(evt.target);
portanto, seu código deve ser lidoif (target.parents('div#hello').length) {
e não...$(target)...
Além das outras respostas, você pode usar este método menos conhecido para obter elementos de um determinado pai, como assim,
No seu caso, isso seria
Observe o uso de vírgulas entre a criança e os pais e suas aspas separadas. Se eles estivessem entre as mesmas citações
você teria um objeto contendo ambos os objetos, independentemente de eles existirem em suas árvores de documentos.
fonte