同 class='IN-something' 要么 '/>  同 class='IN-something' 要么 '/> JQuery if / else语句匹配通配符CSS名称 | 所有编程讨论 | zhouni.net

问题 JQuery if / else语句匹配通配符CSS名称


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

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

如果我知道确切的CSS类,下面的方法会有效,但我知道的是它包含'IN'或'OUT'。

所以这样的事情:

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

想法? 谢谢!


8526
2018-01-17 16:51


起源



答案:


if ($(jRow).attr('class').indexOf('IN-') !== 1)
  {jRow.attr( "class", "OUT-foo" );}
else  
  {jRow.attr( "class", "IN-foo");}

7
2018-01-17 16:55



由于您只需要布尔响应, search 这是适当的方法。但是,只要匹配的字符串继续评估为true,您的方法在这种情况下将正常工作。 - Kyle Wild
为什么投票失败? - Sarfraz
同意......这个答案是完全合法的(就像我的一样),我们都得到了投票。我投票了,Sarfraz。我怀疑某人(肯德尔先生?)有点过于竞争激烈。 - Kyle Wild
@dorkitude:如果我没有使用什么,它不值得投票 你会的 ! - Sarfraz
顺便说一下,这会返回-1或0; (不是1或0,所以!== 1将始终评估为True ..) - Neokoenig


答案:


if ($(jRow).attr('class').indexOf('IN-') !== 1)
  {jRow.attr( "class", "OUT-foo" );}
else  
  {jRow.attr( "class", "IN-foo");}

7
2018-01-17 16:55



由于您只需要布尔响应, search 这是适当的方法。但是,只要匹配的字符串继续评估为true,您的方法在这种情况下将正常工作。 - Kyle Wild
为什么投票失败? - Sarfraz
同意......这个答案是完全合法的(就像我的一样),我们都得到了投票。我投票了,Sarfraz。我怀疑某人(肯德尔先生?)有点过于竞争激烈。 - Kyle Wild
@dorkitude:如果我没有使用什么,它不值得投票 你会的 ! - Sarfraz
顺便说一下,这会返回-1或0; (不是1或0,所以!== 1将始终评估为True ..) - Neokoenig


你可以使用 attribute-contains-prefix-selector(文档) 如果那将是整个类的价值 (或者至少是第一堂课)

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

这也用了 is()(文档) 方法,看看是否 jRow 是一场比赛。

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


7
2018-01-17 16:57



+1这很聪明:) - Sarfraz
V Clever - 在我的应用程序中,我在这种情况下故意替换'foo',但这是一个有用的代码。 - Neokoenig


使用jQuery数据存储“IN”或“OUT”,或者使用符合业务逻辑的名称“IN”或“OUT”添加您自己的属性。这里真正的问题是结合类名。

你也可以突破 IN 和 OUT 并使用多个类。

<tr class = "IN foo"/>

if( $obj.hasClass("in") ){ $obj.removeClass("in").addClass("out") }

1
2018-01-17 16:56



真?为了推广你的两个合法答案而低价投票?来吧。 - Kyle Wild
我没有投票,但“你做错了”从来没有帮助 - hunter
@dorkitude - 你怎么知道谁投票了?只是想知道...我会投票给所有人,所以他们不再抱怨他们的想象点! - hunter
不幸的是,这里的假设是我可以分开课程;我很欣赏你所说的,但由于各种遗留的原因,我现在不能分开它们...... - Neokoenig
是的,这个建议是有效的,但“做错了”的态度是令人讨厌的。 - Evildonald


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

0
2018-01-17 16:55



真?两张投票,只是为了准确回答这个家伙的实际问题? - Kyle Wild
+1有效答案 - hunter
好的,如果你得到了投票,请考虑以下几点:1。 search和indexOf之间的区别 - > indexOf在这里更合适,因为我们这里不需要正则表达式。 2.搜索在未找到时返回-1并且-1转换为布尔值为true,因此您的答案永远不会起作用。 3.在正则表达式中,连字符不需要转义,因为外部字符类它们没有特殊含义。有3个缺陷和更好的答案,你最好删除你的答案。