Проверьте, нет ли в div элемента - PullRequest
6 голосов
/ 09 февраля 2012

Я пытаюсь что-то сделать, если div содержит определенный элемент, но не может вызвать условие. Вот мой лучший снимок.

<div class='test'>
    testing123
</div>

<div class='test'>
  <p>testing456</p>
</div>

$('.test').each(function(){
    if(!$(this).has('p')) {
        $(this).addClass('red');
    }
});

скрипт просто нацелен на все. Вот живая скрипка - http://jsbin.com/igoyuk/edit#javascript,html,live

Ответы [ 4 ]

11 голосов
/ 09 февраля 2012

Помните, что .has () возвращает jQuery , а не логическое значение!

.has (селектор) Возвращает: jQuery
Описание: Сократить набор соответствующих элементов до тех, чей потомок соответствует элементу селектора или DOM.

Выполнение if(!$(this).has('p')) всегда верно, поскольку jQuery всегда возвращает набор, даже если он пустой!

.has() в основном фильтрует набор, к которому он обращен, так что выпросто нужно сделать:

$('.test').has('p').addClass('red');
3 голосов
/ 09 февраля 2012
if (!($(this).find('p').length > 0)) {
    $(this).addClass('red');
}
2 голосов
/ 09 февраля 2012

Рассмотрите возможность использования следующего:

$("div.test:has(p)").addClass("red");

Это запрашивает вашу DOM для <div> элементов, выбирая только те, которые имеют класс test , а затем проверяет, есть ли в нем <p/> элемент.Это немного более кратко = меньше байтов идет по проводу.

0 голосов
/ 09 февраля 2012

Вы можете использовать следующее условие для проверки отсутствия типа элемента:

if($('p', $(this)).length == 0)

Так как $('p', $(this)) вернет все элементы p внутри текущего элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...