如何只选择元素的某些类

时间:2012-01-05 10:07:26

标签: jquery filter selection

我有一个表头单元格,它有格式化和功能类,如下所示:

 <th class="persistent optional some-other-classes">

我想将持久性可选复制到以下所有表格单元格,但很难选择合适的类

我正在尝试这个,但它不会让我任何地方......

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

有没有办法只抓住这两个类,而不是按名称引用 some-other-class

感谢您的帮助!

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

应该是这样的:

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

当然不起作用。

6 个答案:

答案 0 :(得分:1)

以下内容将匹配具有以下任一类的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');
};

<强>更新

好的,我认为我现在理解您的要求 - 如果表格标题是.optional,则列中的所有td元素也应该包含.optional类,类似于{{1} }:

.persistent

答案 1 :(得分:0)

要仅选择具有class persistent和optional的元素,请尝试以下方法:

$('th[class="persistent optional"], th[class="optional persistent"]')

它将无法使用它会有额外的空间。如果您需要处理此类情况,请将函数传递给过滤器:

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

答案 2 :(得分:0)

对于需要filter('.persistent.optional')的交叉点,没有逗号空格。

答案 3 :(得分:0)

您可以使用addClass()方法将类名分配给一组先前匹配的元素:

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

答案 4 :(得分:0)

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

http://jsfiddle.net/hYgqS/

这里是示例html

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

这是JS代码

$('div.a1.a2').filter(function(){
return $(this).attr('class').split(' ').length ==2
}).text("this one");

答案 5 :(得分:0)

经过大量干预后,这是我的解决方案:

    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

如果有更简单的方法可以过滤掉这两个课程,我很乐意为某人提供答案。

感谢您的所有努力,并且抱歉没有告诉我需要什么。