过滤掉 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() ] 此方法用于在选择器的基础之上搜索被选元素有定位的父级元素,仅对可见元素有效

选择 $.ajax Jquery 的父级?

如何使用Jquery将具有某个类的所有元素的内容放入一个变量中

js获取父级元素

jquery如何获得父级的父级元素?

jQuery hide()所有具有特定类的元素,除了具有特定父元素的所有元素