Проверьте, имеет ли div дочерний элемент с определенным атрибутом с jQuery

Я пытаюсь найти синтаксис, чтобы определить, имеет ли div дочерний div, содержащий атрибут data-role, установленный в header. Я пробовал эти вещи без везения:

$('div[data-role*="page"]').each(function(i) {
    if($(this).children('div').attr('data-role')=='header';) {
        alert("has header");
    }
});

$('div[data-role*="page"]').each(function(i) {
    if($(this).children('div[data-role*="header"]').length!=0;) {
        alert("has header");
    }
});

Ответы

Ответ 1

В этом примере у вас есть trailing ; после !=0;

$('div[data-role*="page"]').each(function(i) {
    if ($(this).children('div[data-role="header"]').length != 0) {
        alert("has header");
    }
});

Пример jsfiddle.

Ответ 2

Try:

if ($('div[data-role*="page"]').has("div[data-role=header]").size() > 0)
    alert("Has header");

Ссылка: http://api.jquery.com/has/

Ответ 3

Если я правильно прочитал это, то должно работать следующее:

$('div[data-role=page]:has(div[data-role])').css('border','1px solid #ccc');

чтобы выбрать любой div, содержащий дочерний div с атрибутом 'data-role'.

JS Fiddle.

Пока вы, похоже, хотите использовать if для запуска alert(), это кажется ненужным, так как выше будет функционировать как селектор. Если никакие элементы не соответствуют этому селектору, тогда в прецеденте, который я демонстрирую, никакие элементы не будут затронуты. С другой стороны, если выбран элемент или несколько элементов, то они будут.

Ответ 4

Здесь будут выбраны те divs, которые являются дочерними элементами (с атрибутами роли данных, заданными для заголовка), которые являются дочерними элементами div.

$('div > div[data-role=header]')