【问题标题】:jQuery: filter with multiple classesjQuery:过滤多个类
【发布时间】:2026-01-16 06:45:01
【问题描述】:

有没有一种很好的方法可以将选定的元素过滤到几个类?我知道我可以一次做一个,但这似乎是 jQuery 允许的。

这些是通过 ajax 提供的,我无权定义实际的 html。

$('.val>td').each(function () {
    $(this).filter('.price,.quantity,.remove').children().children().addClass('hidetaxfields');
});

【问题讨论】:

  • 直接将类别添加到您的税务字段中会不会更容易,这样您就可以轻松选择它们进行隐藏?
  • 我很困惑,您是在问是否可以在.filter() 中使用'.price,.quantity,.remove'?由于.filter() 采用jQuery 选择器,因此您可以使用逗号分隔多个选择条件,就像您拥有它一样。这是“多重选择器”:api.jquery.com/multiple-selector
  • 是的,这就是我正在尝试的场景。它只是没有用。
  • 我对我的问题添加了一些解释。对不起。
  • 我明白了。如果您不提供您收到的 HTML,将很难提供比(或修复)您已有的更好的替代方案。

标签: jquery filter


【解决方案1】:

使用.is() 方法应该可以工作:

$('.val>td').each(function () {
    var $this = $(this);
    if( $this.is('.price, .quantity, .remove') ){
        $this.children().children().addClass('hidetaxfields');
    }
});

但这更好:

$('.val>td.price, .val>td.quantity, .val>td.remove').each(function () {
    $(this).children().children().addClass('hidetaxfields');
});

或者这个:

var $tds = $('.val>td').filter('.price, .quantity, .remove');
$tds.each(function () {
    $(this).children().children().addClass('hidetaxfields');
});

【讨论】:

    【解决方案2】:

    使用过滤器,您可以编写一个过滤器函数,可以像这样(demo):

    $('.val>td').filter(function () {
        var that = $(this);
        return that.hasClass('price') || that.hasClass('remove') || that.hasClass('quantity');
    }).addClass('hidetaxfields');
    

    【讨论】:

      【解决方案3】:

      从你给出的例子中,你问的不是很清楚......

      这将产生一个与初始选择器匹配的元素的子集,这些元素具有类one OR two

      $(selector).filter('.one, .two');
      

      这将生成与初始选择器匹配的元素的子集,这些元素具有 onetwo 两个类:

      $(selector).filter('.one.two');
      

      【讨论】:

      • 第一个是我想要的。我想知道为什么它不起作用?
      • 空白在这里无关紧要。
      • 空白在这里无关紧要。
      • 没错,这对我来说非常有效:jsfiddle.net/sperske/8PZza/2 也许是 '.each()' 里面有一个 '.filter()'
      • 您知道,如果您将大部分内容移到初始选择中而不是在循环中执行,您可能会获得性能提升:$('.val > td').filter('.price,.quantity,.remove').each(function(){}) 或者甚至在选择器本身中获取所有内容:$('.val > td.price, .val > td.quantity, .val > td.remove').each(function(){})