Отфильтруйте все элементы в наборе результатов 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)')