Herhangi bir atadan jQuery kullanarak bir sınıfın olup olmadığını kontrol edin


156

JQuery'de herhangi bir ebeveyn, büyük ebeveyn, büyük büyük ebeveynin bir sınıfı olup olmadığını kontrol etmenin herhangi bir yolu var mı ?

Beni kodda bu tür bir şey yapıyor bıraktı bir biçimlendirme yapısı var:

$(elem).parent().parent().parent().parent().hasClass('left')

Ancak, kod okunabilirliği için bu tür bir şey önlemek istiyorum. "Bu sınıfa sahip herhangi bir ebeveyn / büyükbaba veya büyük-baba-baba" demenin bir yolu var mı?

JQuery 1.7.2 kullanıyorum.


stackoverflow.com/questions/16863917/… - Birisi jQuery olmadan yapmak istiyorsa
Robert Niestroj

Yanıtlar:


304
if ($elem.parents('.left').length) {

}

19
Teşekkürler, tam ihtiyacım olan şey! Kayıt için, .lengthgerçek bir değer olarak davranma pratiği JS'de oldukça üretken olsa da, çok daha net ve anlaşılması daha kolay.length > 0
dooleyo

2
İşte jQuery .parents () belgelerine bağlantı
H Dog

75

Eleman atalarını filtrelemenin birçok yolu vardır.

if ($elem.closest('.parentClass').length /* > 0*/) {/*...*/}
if ($elem.parents('.parentClass').length /* > 0*/) {/*...*/}
if ($elem.parents().hasClass('parentClass')) {/*...*/}
if ($('.parentClass').has($elem).length /* > 0*/) {/*...*/}
if ($elem.is('.parentClass *')) {/*...*/} 

Dikkat , closest() yöntem seçici kontrol ederken öğenin kendisini içerir.

Alternatif olarak, örneğin ile eşleşen benzersiz bir seçiciniz varsa şunları kullanabilirsiniz:$elem#myElem

if ($('.parentClass:has(#myElem)').length /* > 0*/) {/*...*/}
if(document.querySelector('.parentClass #myElem')) {/*...*/}

Bir öğeyi, yalnızca sınıflandırma amacıyla üst sınıflarından birine bağlı olarak eşleştirmek istiyorsanız, yalnızca bir CSS kuralı kullanın :

.parentClass #myElem { /* CSS property set */ }

2
(Bunu test etmeden) bu yöntemin daha iyi olduğunu söyleyebilirim. Elem.parents, tüm ana dom yapısını geçecek ve bu öğeye en yakın ebeveyni bulduktan ve bu nedenle daha verimli olduktan sonra en yakın () muhtemelen durmalıdır. Bu eğitimsiz bir tahmindir. Genellikle en yakın () kullanırım. Blogum için araştırılacak yeni bir konu bulduğum anlaşılıyor! : P
dudewad

@dudewad evet öyle ama oldukça yeni. Demek istediğim eski jq versiyonunda AFAIK, durum böyle değildi. Ebeveyn döngüsü, en yakın () kullanılarak ilk eşleşen ebeveyde kırılmadı, ancak şimdi. (hangi jq sürümü beri bilmiyorum ama bu ifade doğru olduğundan eminim)
A. Wolff

Bilmek güzel, bilgi için teşekkürler. İlk versiyondan içeri girmedikleri için garip.
dudewad

2
bulunacak ebeveyn bulunmadığında, ebeveynler () en yakın olandan daha hızlıdır () jsperf.com/closest-vs-parents-foobar
Alex

3
@Alex Gerçekten interresting, giriş için thx! BTW, yeniden okuma soru, Is there any way in jQuery to check if any parent,..., closest()elemanın kendisi için onay bu gerçekten soruya cevap değil bu yüzden, OP explecitely sana böylece, cevap kullanmaktı, eleman kendisi hariç istiyor.parents()
A. Wolff

7

parentsBelirtilen .classseçiciyle yöntemi kullanabilir ve bunlardan herhangi biriyle eşleşip eşleşmediğini kontrol edebilirsiniz:

if ($elem.parents('.left').length != 0) {
    //someone has this class
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.