14

我正在尝试在 JQuery 中编写一个 if/else 语句,它可以通过匹配“IN”或“OUT”(在本例中)来更改元素的类。

例如,我有<DIV>几个class='IN-something'OR class='OUT-something'

如果我知道确切的 CSS 类,下面会起作用,但我只知道它包含“IN”或“OUT”。

所以是这样的:

if ($(jRow).hasClass('IN-*'))
{jRow.attr( "class", "OUT-foo" );}
else  
{jRow.attr( "class", "IN-foo");}

想法?谢谢!

4

4 回答 4

11
if ($(jRow).attr('class').indexOf('IN-') !== 1)
  {jRow.attr( "class", "OUT-foo" );}
else  
  {jRow.attr( "class", "IN-foo");}
于 2011-01-17T16:55:01.290 回答
7

如果那将是整个类值(或至少那是第一类),您可以使用attribute-contains-prefix-selector(docs ) 。

if ($(jRow).is('[class |= IN]')) {

这也使用is()(docs)方法来查看是否jRow匹配。

单击此处测试一个工作示例。 (jsFiddle)


编辑:

如果您的观点是您不知道是什么foo,并且您需要保留它,那么我会这样做:

jRow.attr('class', function(i,cls) {
    return cls.indexOf('IN') > -1 ? cls.replace('IN','OUT') : cls.replace('OUT','IN');
});

您可以将函数作为第二个参数传递给attr()(docs)方法。该函数有 2 个参数。第一个是迭代中的当前索引。第二个是属性的当前值。

返回值是要设置的值。

于 2011-01-17T16:57:38.613 回答
1

使用 jQuery 数据来存储“IN”或“OUT”,或者添加您自己的属性,其名称为“IN”或“OUT”。这里真正的问题是组合类名。

您还可以拆分INandOUT并使用多个类。

<tr class = "IN foo"/>

if( $obj.hasClass("in") ){ $obj.removeClass("in").addClass("out") }
于 2011-01-17T16:56:24.290 回答
0
var class = $(jRow).attr('class');
if (class.search("IN\-.*")) {
    jRow.attr( "class", "OUT-foo" );
}
else {
    jRow.attr( "class", "IN-foo");
}
于 2011-01-17T16:55:34.297 回答