Mam następujący kod.
<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>
Spodziewam się, że tylko po Child-Of-Hello
kliknięciu $('div#hello').parents(target).length
zwróci> 0.
Jednak dzieje się tak po prostu za każdym razem, gdy kliknę w dowolnym miejscu.
Czy coś jest nie tak z moim kodem?
javascript
jquery
Cheok Yan Cheng
źródło
źródło
.has()
wydaje się być przeznaczony do tego celu. Ponieważ zwraca obiekt jQuery, musisz również przetestować.length
:źródło
target
jest w nim.Vanilla 1-liner dla IE8 +:
Oto jak to działa:
źródło
Jeśli masz element, który nie ma określonego selektora i nadal chcesz sprawdzić, czy jest potomkiem innego elementu, możesz użyć jQuery.contains ()
Możesz przekazać element nadrzędny i element, który chcesz sprawdzić, do tej funkcji i zwraca ona, jeśli ten drugi jest potomkiem pierwszego.
źródło
$.contains
pobieranie elementów DOM, a nie instancji jQuery, w przeciwnym razie zawsze zwróci false.$.contains
nigdy nie zwraca prawdy, jeśli dwa argumenty są tym samym elementem. Jeśli chcesz, użyjdomElement.contains(domElement)
.Skończyło się na użyciu .closest () zamiast.
źródło
Aby kod działał, wystarczy zamienić dwa terminy:
Zabrałeś dziecko i rodzica w niewłaściwy sposób.
źródło
var target = $(evt.target);
więc twój kod powinien czytać,if (target.parents('div#hello').length) {
a nie...$(target)...
Oprócz innych odpowiedzi możesz użyć tej mniej znanej metody, aby pobrać elementy określonego rodzica, takie jak:
W twoim przypadku tak by było
Zwróć uwagę na użycie przecinków między dzieckiem a rodzicem oraz ich oddzielnymi cudzysłowami. Gdyby były otoczone tymi samymi cudzysłowami
miałbyś obiekt zawierający oba obiekty, niezależnie od tego, czy istnieją one w ich drzewach dokumentów.
źródło