J'ai le code suivant.
<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>
J'attends que lorsque vous Child-Of-Hello
cliquez dessus, $('div#hello').parents(target).length
retournera> 0.
Cependant, cela arrive quand je clique n'importe où.
Y a-t-il un problème avec mon code?
javascript
jquery
Cheok Yan Cheng
la source
la source
.has()
semble être conçu à cet effet. Puisqu'il renvoie un objet jQuery, vous devez également tester.length
:la source
target
trouve à l'intérieur.Vanilla 1-liner pour IE8 +:
Voici comment ça marche:
la source
Si vous avez un élément qui n'a pas de sélecteur spécifique et que vous voulez quand même vérifier s'il est un descendant d'un autre élément, vous pouvez utiliser jQuery.contains ()
Vous pouvez passer l'élément parent et l'élément que vous souhaitez vérifier à cette fonction et elle retourne si ce dernier est un descendant du premier.
la source
$.contains
prise d'éléments DOM et non d' instances jQuery, sinon il retournera toujours false.$.contains
ne renvoie jamais vrai si les deux arguments sont le même élément. Si vous le souhaitez, utilisezdomElement.contains(domElement)
.J'ai fini par utiliser .closest () à la place.
la source
Vous pouvez faire fonctionner votre code en échangeant simplement les deux termes:
Vous avez fait tourner l'enfant et le parent dans le mauvais sens.
la source
var target = $(evt.target);
donc votre code doit lireif (target.parents('div#hello').length) {
et non...$(target)...
En plus des autres réponses, vous pouvez utiliser cette méthode moins connue pour récupérer les éléments d'un certain parent comme ça,
Dans votre cas, ce serait
Notez l'utilisation de virgules entre l'enfant et le parent et leurs guillemets séparés. S'ils étaient entourés des mêmes citations
vous auriez un objet contenant les deux objets, qu'ils existent ou non dans leurs arborescences de documents.
la source