Usando jQuery para ver se um div tem um filho com uma determinada classe


114

Eu tenho uma div #popupque é preenchida dinamicamente com vários parágrafos com a classe .filled-text. Estou tentando fazer com que o jQuery me diga se #popupcontém um desses parágrafos.

Eu tenho este código:

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

Alguma sugestão?


1
Procura apenas um filho ou descendente (filho, neto, bisneto, etc). O título da pergunta atualmente diz "filho", mas as respostas parecem falar sobre descendentes arbitrários.
hippietrail

Na época eu acredito que estava procurando especificamente por uma criança, mas é difícil lembrar com certeza já que essa pergunta tem quase 4 anos. De qualquer forma, a pergunta e a resposta abrangem filhos e descendentes, e também há respostas que abrangem especificamente filhos e não descendentes, então não tenho certeza do que você está tentando chegar.
Samsquanch

Oh, é só que, ao usar um mecanismo de pesquisa para procurar uma pergunta especificamente sobre a procura de um elemento com um filho correspondendo a um seletor, este é o que ele encontra, então eu teria ajustado o título da pergunta se fosse impreciso para ajudar outras pessoas a encontrar a pergunta certa no futuro.
hippietrail

Respostas:




7

Use a função infantil do jQuery.

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

$.children('').length retornará a contagem de elementos filhos que correspondem ao seletor.


1
.size()retorna o mesmo que a .lengthpropriedade, mas é mais lento, portanto, você deve substituí-lo.
Johannes Klauß

Obrigado Johnnes por me apontar isso! Eu não sabia disso. Answare atualizado!
Christopher Ramírez

De nada, mas ainda há um erro. É .lengthnão.length()
Johannes Klauß

: PI pensava que era uma função como a maioria das interfaces jQuery. Tipo de inconsistência, eu acho. Mas bem, answare atualizado mais uma vez: P Obrigado Johannes.
Christopher Ramírez

A .lengthpropriedade não faz parte da biblioteca jQuery, é apenas javascript nativo. Mas sim, às vezes pode ser confuso.
Johannes Klauß

4

Maneira simples

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

2
O método .size () é funcionalmente equivalente à propriedade .length; no entanto, a propriedade .length é preferida porque não tem a sobrecarga de uma chamada de função.
Hitesh Modha

1

Se for um filho direto, você pode fazer como a seguir se pudesse ser aninhado mais profundamente, remova o>

$("#text-field").keydown(function(event) {
    if($('#popup>p.filled-text').length !== 0) {
        console.log("Found");
     }
});
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.