2012-05-10 8 views
66

Ich habe ein div #popup, das dynamisch mit mehreren Absätzen mit der Klasse .filled-text gefüllt wird. Ich versuche, jQuery zu sagen, wenn #popup einen dieser Absätze darin hat.Verwenden von jQuery, um zu sehen, ob ein div ein Kind mit einer bestimmten Klasse hat

Ich habe diesen Code:

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

Irgendwelche Vorschläge?

+0

Suchen Sie nur für ein ** ** Kind oder für jeden ** Nachkommen ** (Kinder, Enkel, Urenkel, usw.). Der Fragetitel sagt derzeit "Kind", aber die Antworten scheinen über beliebige Nachkommen zu sprechen. – hippietrail

+0

Zu der Zeit glaube ich, dass ich speziell nach einem Kind gesucht habe, aber es ist schwer sich daran zu erinnern, da diese Frage fast 4 Jahre alt ist. Wie auch immer, die Frage und die Antwort beziehen sich sowohl auf Kinder als auch auf Nachkommen, und es gibt auch Antworten, die sich speziell auf Kinder und nicht auf Nachkommen beziehen, also bin ich mir nicht sicher, worauf Sie hinaus wollen. – Samsquanch

+0

Oh, es ist nur, dass wenn Sie eine Suchmaschine verwenden, um speziell nach einem Element mit einem Kind zu suchen, das einem Selektor entspricht, das ist das, das es findet, also würde ich den Titel der Frage optimiert haben, wenn es ungenau war, anderen Leuten zu helfen finde die richtige Frage in der Zukunft. – hippietrail

Antwort

127

können Sie verwenden, um die find Funktion:

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

Dies funktionierte tatsächlich so, wie ich es brauchte, aber als Referenz 'if ($ ('# popup'). Hat ('p.filled-text'). Length! = 0) {' funktioniert auch. – Samsquanch

+6

Kein Bedarf für 0 zu überprüfen. 0 ist ein falsey in js. https://developer.mozilla.org/en-US/docs/Glossar/Falsy – ravi

1

Wenn es ein direktes Kind ist man, wie unten tun können, wenn es tiefer entfernen verschachtelt werden könnte die>

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

Es gibt eine hasClass Funktion

if($('#popup p').hasClass('filled-text')) 
5

Verwenden Sie die children Funktion von j Abfrage.

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

$.children('').length wird die Anzahl der untergeordneten Elemente zurück, die den Wähler entsprechen.

+0

'.size()' gibt das selbe wie die '.length'-Eigenschaft zurück, ist aber langsamer, also sollten Sie das ersetzen. –

+0

Danke Johnnes, dass er mich darauf hingewiesen hat! Ich wusste es nicht. Answare aktualisiert! –

+0

Gern geschehen, aber es ist immer noch ein Fehler. Es ist '.length' nicht' .length() ' –

2

einfacher Weg

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

Was ist der Unterschied zwischen Größe() und Länge ???? –

+1

Die Methode .size() entspricht funktionell der Eigenschaft .length. Die Eigenschaft .length wird jedoch bevorzugt, da sie nicht den Overhead eines Funktionsaufrufs aufweist. –

+1

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

Verwandte Themen