РЕДАКТИРОВАТЬ 2: Я думаю, это то, что вы ищете:
var el = $('#example1');
var res = el.children('[data-type]');
while ( ( el = el.children(':not([data-type])') ).length ) {
res = res.add(el.children('[data-type]'));
}
Этот процесс идет рекурсивно глубоко, но рекурсия в любой дочерней ветви останавливается, когда элементнайдено с data-type
, поэтому оно продолжается только до тех пор, пока есть ребенок, который не имеет data-type
.
Возможно, будет легчеследуйте, если я использую цикл do-while
, и раскрутите часть кода:
var el = $('#example1'); // el is the current level
var res = $(); // res holds the result
var data_types; // holds the children with data-type for the current level
do {
// from current level, get children with data-type
data_types = el.children('[data-type]');
// add those to the result set
res = res.add( data_types );
// make the current level be the children of the current level that
// do NOT have data-type
el = el.children().not( data_types );
} while( el.length ); // continue as long as the new current level
// has at least one element
.
.
РЕДАКТИРОВАТЬ: Возможно, я неправильно понял одну часть.
Похоже, элемент с data-type
может иметь детей, которые также имеют data-type
.Если это так, замените селектор следующим образом:
var ex = $('#example1');
var res = ex.find('> [data-type], > * > [data-type]');
Итак, чтобы подвести итог, он говорит, что все 1010 * детей и внуков имеют data-type
атрибут.
Оригинальный ответ:
Если я понимаю, вы хотите, чтобы у детей был data-type
, а из детей, которые не data-type
,Вам также нужно добавить своих детей, которые data-type
.
var ex = $('#example1');
var res = ex.find('> [data-type], > :not([data-type]) > [data-type]');
. Используются multiple-selector
[документы] .
Первый селектор:
'> [data-type]'
... который получит потомков с атрибутом data-type
.
Второй селектор:
'> :not([data-type]) > [data-type]'
... который сначала получит детей, которые имеют , а не , имеют data-type
, но из них, они получат своих детей, которые имеют , имеют data-type
.
Это похоже на то, что вы хотите?