2012-01-05 162 views
0

我有一个表头单元格,同时具有格式和功能类别,像这样的一些类:如何选择只有一个元素

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

我想持续可选复制到所有下表细胞,但具有选择适当的类

我想这是一个困难时期,但它不会让我在任何地方......

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

有没有办法只抓住这两个班,而没有参考一些其他类的名称?

感谢您的帮助!

编辑:更多信息
项目将有超过3类。我只是想复制/粘贴的执着和可选的类,它处理表的外观,并留下格式类

它应该是这样的:

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

不,当然工作。

+1

你指的是具有* both *类的物品,不包括仅包含其中之一的物品? – 2012-01-05 10:11:13

+0

我需要将** persistent **和** optional **复制到下面的所有表格单元格。所以我的选择必须是“选择与永久和可选匹配的所有th类。希望已经够清楚了。 – frequent 2012-01-05 10:14:29

+0

@通常很清楚,你想最终得到的元素只有** **'可选'(如果存在)和'持久'(如果存在)类。正确? – Viruzzo 2012-01-05 10:40:41

回答

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 

如果有更简单的方法来过滤这两个班级,我会很乐意将答案给予某人。

感谢您的所有努力,并遗憾地没有准确地告诉我需要什么。

+0

我已经更新了我的答案,根据我认为你的要求是什么,*希望*比上面简单。 – 2012-01-05 15:16:39

0

只选择类持久性和可选的元素,试试这个:

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

它不会工作,它会有更多的空间。如果您需要处理这样的情况下传递函数的过滤器:

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

我想我的问题不够精确。我需要提出一个包含类名“持久”和“可选”但不包含任何其他类的选择。 – frequent 2012-01-05 10:25:18

+0

我编辑了答案。现在它应该更准确。 – Krzysztof 2012-01-05 10:52:38

0

对于路口你需要filter('.persistent.optional'),没有空间没有逗号。

+0

看到我上面的评论。我需要得到一个只包含persisten和可选的选择。 – frequent 2012-01-05 10:26:03

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类,同样为.persistent

$('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'); 
    } 
    }); 
}); 
+0

正确。看起来不错。谢谢! – frequent 2012-01-05 19:11:49

0

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

$("th").addClass("persistent optional") 
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");