2012-05-10 13 views
66

Mam div #popup, który jest dynamicznie wypełniany kilkoma akapitami z klasą .filled-text. Próbuję uzyskać jQuery, aby mi powiedzieć, czy #popup ma jeden z tych akapitów w nim.Używanie jQuery do sprawdzenia, czy div ma dziecko z określoną klasą

mam ten kod:

$("#text-field").keydown(function(event) { 
    if($('#popup').has('p.filled-text')) { 
     console.log("Found"); 
    } 
}); 

jakieś sugestie?

+0

Szukasz tylko dla dziecka ** ** ** lub jakikolwiek potomek ** (dziecko, wnuk, wnuczka wielki, etc). W tytule pytania obecnie mówi się "dziecko", ale odpowiedzi wydają się mówić o arbitralnych potomkach. – hippietrail

+0

W tym czasie uważałem, że szczególnie poszukiwałem dziecka, ale na pewno trudno o nim pamiętać, ponieważ to pytanie ma prawie 4 lata. Tak czy inaczej, pytanie i odpowiedź obejmują zarówno dzieci, jak i potomków, i są też odpowiedzi, które dotyczą konkretnie dzieci, a nie potomków, więc nie jestem pewien, do czego próbujesz się dostać. – Samsquanch

+0

To tylko dlatego, że podczas korzystania z wyszukiwarki, szukając konkretnego pytania o szukanie elementu z dzieckiem pasującym do selektora, znajduje się ten, który znajdowałby się tak, żebym zmodyfikował tytuł pytania, gdyby był niedokładny, by pomóc innym ludziom znajdź właściwe pytanie w przyszłości. – hippietrail

Odpowiedz

127

Można użyć find funkcję:

if($('#popup').find('p.filled-text').length !== 0) 
    // Do Stuff 
+4

To działało tak, jak było mi potrzebne, ale dla odniesienia 'if ($ ('# popup'). Ma ('p.filled-text'). Length! = 0) {' również działa. – Samsquanch

+6

Nie trzeba sprawdzać, czy 0. 0 to błąd w js. https://developer.mozilla.org/en-US/docs/Glossary/Falsy – ravi

1

Jeśli jest to bezpośredni dziecko może to zrobić jak poniżej, jeśli może to być zagnieżdżone głębiej usunąć>

$("#text-field").keydown(function(event) { 
    if($('#popup>p.filled-text').length !== 0) { 
        console.log("Found"); 
     } 
}); 
5

Użyj funkcji children j Pytanie.

$("#text-field").keydown(function(event) { 
    if($('#popup').children('p.filled-text').length > 0) { 
     console.log("Found"); 
    } 
}); 

$.children('').length zwróci liczbę elementów podrzędnych zgodnych z selektorem.

+0

'.size()' zwraca to samo, co właściwość '.length', ale jest wolniejsza, więc należy ją zastąpić. –

+0

Dzięki Johnnes za wskazanie mi tego! Nie wiedziałem tego. Aktualizacja Answare! –

+0

Nie ma za co, ale wciąż jest błąd. To jest '.length', a nie' .length() ' –

2

prosty sposób

if ($('#text-field > p.filled-text').length != 0) 
+0

jaka jest różnica między size() i length ???? –

+1

Metoda .size() jest funkcjonalnie równoważna właściwości .length; Jednak właściwość .length jest preferowana, ponieważ nie ma narzutów wywołania funkcji. –

+1

ref: http://api.jquery.com/size/ –

Powiązane problemy