【问题标题】:JQuery if/else statement matching a wildcard CSS namejQuery if/else 语句匹配通配符 CSS 名称
【发布时间】:2011-01-17 16:51:31
【问题描述】:

我正在尝试在 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");}

想法? 谢谢!

【问题讨论】:

    标签: jquery class if-statement wildcard indexof


    【解决方案1】:
    if ($(jRow).attr('class').indexOf('IN-') !== 1)
      {jRow.attr( "class", "OUT-foo" );}
    else  
      {jRow.attr( "class", "IN-foo");}
    

    【讨论】:

    • 由于您只想要一个布尔响应,search 是这里合适的方法。但是,在这种情况下,只要匹配的字符串继续评估为 true,您的方法就可以正常工作。
    • 同意...这个答案是完全合法的(就像我的一样),我们都投了反对票。我投了赞成票,萨弗拉兹。我怀疑某人(肯德尔先生?)有点太有竞争力了。
    • @dorkitude:如果我不使用 你会做什么,它不值得投反对票!
    • 重新阅读我的评论。我没有对你投反对票。我投了你一票。
    • 顺便说一下,这会返回 -1 或 0; (不是 1 或 0,所以 !== 1 将始终评估为 True..)
    【解决方案2】:

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

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

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

    Click here to test a working example. (jsFiddle)


    编辑:

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

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

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

    返回值是要设置的值。

    【讨论】:

    • V Clever - 在我的应用程序中,在这种情况下,我故意替换了“foo”,但这是一段有用的代码。
    【解决方案3】:

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

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

    <tr class = "IN foo"/>

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

    【讨论】:

    • 真的吗?否决两个合法答案,只是为了宣传你的答案?来吧。
    • 我没有投反对票,但“你做错了”从来没有帮助
    • @dorkitude - 你怎么知道谁投了反对票?只是想知道......我会投票给每个人,这样他们就不会再抱怨他们的假想点了!
    • 不幸的是,这里的假设是我可以将类分开;我很欣赏你的说法,但由于各种遗留原因,我目前无法拆分它们......
    • 是的,建议是有效的,但“做错事”的态度令人讨厌。
    【解决方案4】:
    var class = $(jRow).attr('class');
    if (class.search("IN\-.*")) {
        jRow.attr( "class", "OUT-foo" );
    }
    else {
        jRow.attr( "class", "IN-foo");
    }
    

    【讨论】:

    • 真的吗?两票反对,只是为了准确回答那家伙的实际问题?
    • 好的,如果你投了反对票,请考虑以下几点: 1. the difference between search and indexOf-> indexOf 在这里更合适,因为我们在这里不需要正则表达式。 2. 搜索返回 -1 on not found 并且 -1 转换为 boolean 为真,所以你的答案永远不会奏效。 3. 正则表达式中的连字符不需要转义,因为在字符类之外它们没有特殊含义。有 3 个缺陷和更好的答案,你最好删除你的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 2019-06-26
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多