过滤掉 jQuery 结果集中的所有元素,这些元素的父元素(在任何级别)具有特定的 class
Filter out all elements in a jQuery result set that have a parent (at any level) with a certain class
我正在尝试将某些 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
class .
这听起来很简单,但我似乎无法让它发挥作用。我尝试了 .find()
、.filter()
、.remove()
的不同组合...但它似乎从来没有完全满足我的需要。
有什么建议吗?
可以在 filter()
中使用 closest()
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)')
我正在尝试将某些 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
class .
这听起来很简单,但我似乎无法让它发挥作用。我尝试了 .find()
、.filter()
、.remove()
的不同组合...但它似乎从来没有完全满足我的需要。
有什么建议吗?
可以在 filter()
closest()
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)')