Jquery 如何仅选择元素的某些类

Jquery 如何仅选择元素的某些类,jquery,filter,selection,Jquery,Filter,Selection,我有一个表头单元格,它既有格式类,也有函数类,如下所示: <th class="persistent optional some-other-classes"> 有没有办法只抓取这两个类而不按名称引用其他类 谢谢你的帮助 编辑:更多信息 项目将有3个以上的类。我只想复制/粘贴持久类和可选类,它们处理表的外观,并保留格式化类 应该是这样的: $('th, TH').attr(class).filter( '.persistent, .optional' ) 当然,这不起作用。要

我有一个表头单元格,它既有格式类,也有函数类,如下所示:

 <th class="persistent optional some-other-classes">
有没有办法只抓取这两个类而不按名称引用其他类

谢谢你的帮助

编辑:更多信息
项目将有3个以上的类。我只想复制/粘贴持久类和可选类,它们处理表的外观,并保留格式化类

应该是这样的:

 $('th, TH').attr(class).filter( '.persistent, .optional' )

当然,这不起作用。

要仅选择类为persistent且可选的元素,请尝试以下操作:

$('th[class="persistent optional"], th[class="optional persistent"]')
它不起作用,会有额外的空间。如果需要处理此类情况,请将函数传递给过滤器:

$('th').filter(function(){ 
    return this.className.match(/^\s*(persistent\s+optional|optional\s+persistent)\s*$/);
})

对于交叉点,您需要
过滤器('.persistent.optional')
,无空格,无逗号。

以下内容将匹配具有任一类的
th
元素:

$('th.persistent, th.optional');
或者匹配同时具有以下两个属性的
th
元素:

$('th.persistent.optional');
或者,要获取仅具有持久类、可选类或两者兼有的类的元素:

$('th.persistent, th.optional').filter(function() {
  var classes = this.className.split(/\s+/);
  return classes.length == 1 || (classes.length == 2 && $(this).is('.persistent.optional');
};
更新

好的,我想我现在理解您的要求了-如果表格标题是
。可选的
列中的所有
td
元素也应该有
。可选的
类,与
类似。持久的

$('th.persistent, th.optional').each(function() {
  var th = $(this);
  var col = th.parent().children().index(th);
  th.closest('table').find('td').each(function() {
    var td = $(this);
    if (td.parent().children().index(td) === col) {
      if (th.is('.persistent')) td.addClass('persistent');
      if (th.is('.optional')) td.addClass('optional');
    }
  });
});
可以使用该方法将类名分配给一组先前匹配的元素:

$("th").addClass("persistent optional")

我创建了一个JSFIDLE来选择只包含指定类的项

下面是示例html

<div class="a1 a2 b">
1
</div>
<div class="a1 a2">
2
</div>

经过多次干预,这是我的解决方案:

    var classes = "",

    allClasses = th.attr("class").split(/\s+/);

    for (var j = 0; j < allClasses.length; j++) {
          if (allClasses[j] === 'persistent' || allClasses[j] === 'optional' ) {
             classes = classes+" "+allClasses[j]
             }
    }

    console.log(classes)  
    // returns "persistent optional" or "persistent" or "optional"
    // leaves away all other classes
var classes=“”,
allClasses=th.attr(“class”).split(/\s+/);
对于(var j=0;j
如果有更简单的方法过滤掉这两个类,我很乐意给别人答案


感谢您的所有努力,很抱歉没有准确地告诉我需要什么。

您是指同时具有两个类的项,不包括仅具有其中一个类的项吗?我需要将持久性和可选性复制到下面的所有表格单元格。所以我的选择必须是“选择所有匹配持久性和可选性的th类”。希望这足够清楚。@frequency要清楚,您希望最后的元素只有'optional'(如果存在)和'persistent'(如果存在)类。对吗?我觉得我的问题不够精确。我需要选择一个包含类名“persistent”和“optional”但不包含任何其他类的选项。请参阅上面的注释。我需要得到一个只包含persisten和可选的选项。我已经根据我认为您的要求更新了我的答案,希望这比上面的更简单。
$('div.a1.a2').filter(function(){
return $(this).attr('class').split(' ').length ==2
}).text("this one");
    var classes = "",

    allClasses = th.attr("class").split(/\s+/);

    for (var j = 0; j < allClasses.length; j++) {
          if (allClasses[j] === 'persistent' || allClasses[j] === 'optional' ) {
             classes = classes+" "+allClasses[j]
             }
    }

    console.log(classes)  
    // returns "persistent optional" or "persistent" or "optional"
    // leaves away all other classes