Отфильтруйте все элементы в наборе результатов jQuery, у которых есть родитель (на любом уровне) с определенным классом

Я пытаюсь применить некоторые функциональные возможности jQueryUI ко всем элементам моего SPA, однако у меня возникают проблемы с пропуском элементов, содержащихся в определенном родительском элементе. На самом деле я не уверен, что jQuery может делать то, что я сейчас спрашиваю.

Бит соответствующего кода:

function initializeControls($container) {
    var $context;

    if ($container != undefined)
        $context = $container;
    else
        $context = $("html");

    $context = //$context, but ignoring all .no-controls elements and ALL children

    //do stuff...
}

Проще говоря, я хочу, чтобы все элементы в $context где родительский элемент, первый родительский или другой, не имеет .no-controls учебный класс.

Звучит просто, но я не могу заставить это работать. Я пробовал разные комбинации .find(), .filter(), .remove()... но это никогда не делает именно то, что мне нужно.

Какие-нибудь советы?

2 ответа

Решение

Можешь использовать closest() в filter()

var $filteredCollection = $context.filter(function(){
  return !$(this).closest('.no-controls').length;
});

closest() проверяет сам элемент и всех предков

Мое предложение:

jQuery.expr[':'].parents = function(a,i,m){
  return jQuery(a).parents(m[3]).length < 1 && !jQuery(a).is(m[3]);
};



$context.filter(':parents(.no-controls)')
Другие вопросы по тегам