【问题标题】:Filter out all elements in a jQuery result set that have a parent (at any level) with a certain class过滤掉 jQuery 结果集中所有具有某个类的父级(在任何级别)的元素
【发布时间】: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()... 的不同组合,但它似乎从来没有完全满足我的需求。

有什么建议吗?

【问题讨论】:

    标签: javascript jquery jquery-ui dom jquery-selectors


    【解决方案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)')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      相关资源
      最近更新 更多