Використовуйте jQuery, щоб дізнатися, чи є у діві дитина з певним класом


114

У мене є div, #popupякий динамічно заповнюється кількома абзацами з класом .filled-text. Я намагаюся змусити jQuery сказати мені, чи #popupє в ньому один із цих абзаців.

У мене є цей код:

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

Будь-які пропозиції?


1
Ви шукаєте лише дитину чи якогось нащадка (дитина, онук, правнук тощо). Заголовок питання наразі говорить "дитина", але відповіді, здається, говорять про довільних нащадків.
hippietrail

На той час я вважаю, що спеціально шукав дитину, але важко згадати напевно, оскільки це питання майже 4 роки. Так чи інакше, питання і відповіді стосуються і дітей, і нащадків, а також є відповіді, які стосуються саме дітей, а не нащадків, тому я не впевнений, що ви намагаєтесь отримати.
Самскванч

О, це просто те, що при використанні пошукової системи шукати питання, зокрема про пошук елемента з дитиною, що відповідає селектору, це саме той, який він знаходить, тому я би переробив назву питання, якби він був неточним, щоб допомогти іншим знайти людину правильне питання в майбутньому.
hippietrail

Відповіді:


196

Ви можете скористатися функцією пошуку :

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

7
Це насправді працювало так, як мені було потрібно, але для довідок if($('#popup').has('p.filled-text').length != 0) {також працює.
Самскванч

9
Немає необхідності перевіряти 0. 0 - це фальси в js. developer.mozilla.org/en-US/docs/Glossary/Falsy
РАВИ


7

Використовуйте дитячу функцію jQuery.

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

$.children('').length поверне кількість дочірніх елементів, які відповідають селектору.


1
.size()повертає те саме, що і .lengthвластивість, але повільніше, тому вам слід замінити його.
Йоганнес Клаус

Дякую Джонсу за те, що вказав на мене! Я цього не знав. Відповідне оновлення!
Крістофер Рамірес

Вас вітають, але все ж є помилка. Це .lengthне так.length()
Йоганнес Клаус

: PI подумав, що це функція, як і більшість інтерфейсів jQuery. Я думаю, що це невідповідність. Але добре, програмне забезпечення знову оновлено: P Дякую Йоханнес.
Крістофер Рамірес

.lengthВластивість не є частиною бібліотеки JQuery, це просто рідний JavaScript. Але так, іноді це може заплутати.
Йоганнес Клаус

4

Простий спосіб

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

2
Метод .size () функціонально еквівалентний властивості .length; проте властивість .length є кращою, оскільки не має накладних витрат виклику функції.
Hitesh Modha

1

Якщо це пряма дитина, ви можете зробити так, як нижче, якщо вона може бути вкладена глибше, видаліть>

$("#text-field").keydown(function(event) {
    if($('#popup>p.filled-text').length !== 0) {
        console.log("Found");
     }
});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.