2009-05-14 14 views
25

Bir öğenin bir diğerinin içinde olup olmadığını kontrol etmek için JavaScript veya jQuery'de herhangi bir doğrudan yol var mı?Bir öğenin jQuery'de bir diğerinin içinde olup olmadığını nasıl kontrol edebilirim?

ben rastgele bir sayı elemanlarının ağacında alt adımları olabilir bulmak istediğiniz eleman olarak $(this).parent kastetmiyorum.

ben olacak herhangi bir doğrudan yolu yoktur
if($("div#THIS_DIV").isWithin("div#THIS_PARENT")) ... 

ise:

<div id="THIS_PARENT"> 
<div id="random"> 
    <div id="random"> 
    <div id="random"> 
    <div id="THIS_DIV"> 
(... close all divs ...) 

Yani sözde kod: Örnek olarak

, ben < div id="THIS DIV"> < div id="THIS PARENT"> içinde olacaktır olmadığını kontrol etmek istiyorum Muhtemelen bunun için bir işlev yapmak ama yine de sormaya değer.

+0

Sen işlevi 'jQuery.contains (konteyner, soyundan)' inşa kullanabilirsiniz. Cevabımı aşağıya bakın. Ben "javascript" aratarak burada başardı Çünkü – TLindig

cevap

44

Bunu yapabilirsiniz:

if($('#THIS_DIV','#THIS_PARENT').length == 1) { 

} 

arama için specifying a context (ikinci argüman) tarafından temelde "#THIS_PARENT kimliğine sahip bir öğenin içinde #THIS_DIV kimliğine sahip bir element için bak" diyorsun. Bu jQuery kullanarak bunu yapmanın en başarılı yoludur.

size daha mantıklı eğer Ayrıca, find kullanarak, şöyle yazabiliriz:

: Eğer yukarı çocuktan aramak istiyorsanız
if($('#THIS_PARENT').find('#THIS_DIV').length == 1) { 

} 

Ya da böyle

, parents kullanarak
if($('#THIS_DIV').parents('#THIS_PARENT').length == 1) { 

}  

Bunlardan herhangi iyi çalışması gerekir. length bit "arama" emin uzunluğunu yapmak için gerekli olan Şahsen bunu en kolay yol olarak ilkinden gitmek tavsiye elbette olur 0.> olduğunu. Eğer kimliğine göre bir elemana atıfta eğer (mükemmel Tamam elbette rağmen) etiket adıyla seçici önsöz

Ayrıca buna gerek yok. Bununla birlikte jQuery, dahili getElementById()'u dahili olarak kullanacağı için hıza bağlı olarak gerçekten yardımcı olmaz. Sadece <div> elemanları belirli bir sınıf olacak eğer etiket adını kullanarak div.myclass olarak, sınıfı tarafından seçilirken sadece önemli olan .myclass çok daha hızlı, fazla. jQuery ile

+0

, burada Prototip kitaplığı kullanarak ') (' ebeveyn olarak bunu versiyonunu aynı yapmanın bir yolu var. 'If ($ ('THIS_DIV') yukarıya ('# THIS_PARENT')) {..} ' – Izkata

16

> = 1.4 (2010) Eğer bu statik bir yöntem değildir jQuery elemanları ile DOM öğeleri ile çalışır ve true veya false döndüren çok hızlı fonksiyonu jQuery.contains()

kullanabilirsiniz.

jQuery.contains(container, descendant) 

Örnek: Bir eleman belgede ise bu yapabileceğini kontrol etmek için:

jQuery.contains(document.body, myElement) 
İlgili konular