Проверьте, есть ли у div дочерний элемент с определенным атрибутом, с помощью jQuery - PullRequest
13 голосов
/ 21 февраля 2011

Я пытаюсь найти синтаксис, чтобы определить, имеет ли 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");
    }
});

Ответы [ 4 ]

16 голосов
/ 21 февраля 2011

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

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

Пример использования jsfiddle .

6 голосов
/ 21 февраля 2011

Попробуйте:

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

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

5 голосов
/ 21 февраля 2011

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

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

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

JS Fiddle .

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

4 голосов
/ 21 февраля 2011

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

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