Ich habe den folgenden Code.
<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>
Ich erwarte nur beim Child-Of-Hello
Klicken $('div#hello').parents(target).length
> 0 zurück.
Es passiert jedoch immer dann, wenn ich irgendwo auf etwas klicke.
Stimmt etwas mit meinem Code nicht?
javascript
jquery
Cheok Yan Cheng
quelle
quelle
.has()
scheint für diesen Zweck ausgelegt zu sein. Da es ein jQuery-Objekt zurückgibt, müssen Sie auch Folgendes testen.length
:quelle
target
es sich darin befindet.Vanille 1-Liner für IE8 +:
Hier, wie es funktioniert:
quelle
Wenn Sie ein Element haben, das keinen bestimmten Selektor hat, und dennoch prüfen möchten, ob es ein Nachkomme eines anderen Elements ist, können Sie jQuery.contains () verwenden.
Sie können das übergeordnete Element und das Element, das Sie überprüfen möchten, an diese Funktion übergeben und es wird zurückgegeben, wenn letzteres ein Nachkomme des ersten ist.
quelle
$.contains
DOM-Elemente und keine jQuery-Instanzen zu verwenden, da sonst immer false zurückgegeben wird.$.contains
Gibt niemals true zurück, wenn die beiden Argumente dasselbe Element sind. Wenn Sie das wollen, verwenden SiedomElement.contains(domElement)
.Endete stattdessen mit .closest ().
quelle
Sie können Ihren Code zum Laufen bringen, indem Sie einfach die beiden Begriffe austauschen:
Sie hatten das Kind und die Eltern falsch herum.
quelle
var target = $(evt.target);
Also sollte Ihr Code lesenif (target.parents('div#hello').length) {
und nicht...$(target)...
Zusätzlich zu den anderen Antworten können Sie diese weniger bekannte Methode verwenden, um Elemente eines bestimmten Elternteils wie folgt zu erfassen:
In Ihrem Fall wäre das
Beachten Sie die Verwendung von Kommas zwischen dem Kind und dem Elternteil und deren separaten Anführungszeichen. Wenn sie von denselben Zitaten umgeben wären
Sie hätten ein Objekt, das beide Objekte enthält, unabhängig davon, ob sie in ihren Dokumentbäumen vorhanden sind.
quelle