过滤掉 jQuery 结果集中所有具有某个类的父级(在任何级别)的元素
Posted
技术标签:
【中文标题】过滤掉 jQuery 结果集中所有具有某个类的父级(在任何级别)的元素【英文标题】:Filter out all elements in a jQuery result set that have a parent (at any level) with a certain class 【发布时间】:2016-04-19 04:22:31 【问题描述】:我正在尝试将一些 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 父元素,第一个父元素或其他元素都具有 .no-controls
类。
这听起来很简单,但我似乎无法让它发挥作用。我尝试了 .find()
、.filter()
、.remove()
... 的不同组合,但它似乎从来没有完全满足我的需求。
有什么建议吗?
【问题讨论】:
【参考方案1】:可以在filter()
中使用closest()
var $filteredCollection = $context.filter(function()
return !$(this).closest('.no-controls').length;
);
closest()
检查元素本身和所有祖先
【讨论】:
没有考虑过使用closest()
,因为我过去遇到过问题,但也许我没有正确使用它。
问题 - 为什么是.length
?它有效,但我很好奇如何。【参考方案2】:
我的建议是:
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)')
【讨论】:
以上是关于过滤掉 jQuery 结果集中所有具有某个类的父级(在任何级别)的元素的主要内容,如果未能解决你的问题,请参考以下文章
[ jquery 过滤器 offsetParent() ] 此方法用于在选择器的基础之上搜索被选元素有定位的父级元素,仅对可见元素有效