2010-10-18 14 views

Odpowiedz

66
if($(target).parents('.wrapper').length > 0) { 
    //do something... 
} 
+0

Mała modyfikacja zamiast $ (target) używać $ (this) jako docelowa zawiera łańcuch. –

+1

Należy zauważyć, że ten test sprawdza, że ​​obiekt docelowy jest bezpośrednim potomkiem opakowania. – cherouvim

+0

@Chinmayee, 'href' wskazuje na rzeczywisty" identyfikator "elementu, który OP chce sprawdzić, a nie" ten ". –

32

.has() jest chyba Mose wygodna składnia:

if($('.wrapper').has($(target))) { 
    // do something 
} 

Jeszcze bardziej "potężny" (pod względem wydajności) jest $.contains(). Więc idealnym algorytm powinien wyglądać następująco:

var $wrapper = $('.wrapper'), 
    $target = $(this).attr('href'); 

if($.contains($wrapper[0], $target[0])) { 
    // do something 
} 

Reference: .has(), $.contains()

+4

+1 dla '$.zawiera() 'który jest jawnie opisany przez jQuery API jako" Sprawdź, czy element DOM jest potomkiem innego elementu DOM. " – gfullam

+2

Nie polecam używania '.has()' zgodnie z opisem, ponieważ nie zwraca ono wartości boolowskiej takiej, jakiej można by się spodziewać. Zamiast tego filtruje oryginalny zestaw elementów DOM i zwraca nowy obiekt jQuery. ("Opis: Zmniejsz zestaw dopasowanych elementów do tych, które mają potomka, który pasuje do selektora lub elementu DOM.") Tak więc mimo, że _powoduje to, że w tym przypadku wynik jest prawidłowy, myślę, że wartość zwracana jest nieintuicyjna i może powodować bóle głowy jeśli założysz, że zwraca wartość boolowską. –

0

nie można powiązać innego zdarzenia? .

$('.wrapper *').click(function() { 
    // will execute on childrens of .wrapper 
}); 
2

Małe zmiany kodu Jacoba, jeśli dziecko jest głębsza niż jeden poziom w

if($(target).parents('.wrapper').length) { 
    //do something... 
} 
3

Oto porządniej sposób: powiązać go jako plugin jQuery. Może się okazać łatwiejsze do zrozumienia i użycia.

$.fn.isChildOf = function(element) 
{ 
    return $(element).has(this).length > 0; 
} 

Zastosowanie:

if ($('.target').isChildOf('.wrapper')) { 
     //do all the things. 
    } 
0

Wiem, że to stary post, ale może to być przydatne dla kogoś. Wydaje mi się, że w wielu przypadkach za pomocą .closest() miałby lepszą wydajność:

if ($(target).closest('.wrapper').length){ 
    // your code here 
} 
1
<div class="parent"> 
    <div class="child"> 
    </div> 
</div> 


$(".child").is(".parent .child") 
+1

jaki jest kontekst dla tej odpowiedzi, wygląda jak kopia kodu i wklejona skądś. Czy możesz go przedłużyć wprowadzeniem lub opisem? – Farside

+0

Chociaż ten kod może odpowiedzieć na pytanie, podanie dodatkowego kontekstu dotyczącego * how * i/lub * dlaczego * rozwiązuje problem, poprawi długoterminową wartość odpowiedzi. - [Z recenzji] (http://stackoverflow.com/review/low-quality-posts/13223379) –

Powiązane problemy