【问题标题】:stuff.className.indexOf("term") == 1 not workingstuff.className.indexOf("term") == 1 不工作
【发布时间】:2012-11-17 06:39:44
【问题描述】:

我用谷歌搜索了一下,发现下面的代码不起作用,因为 inputs[i].className 不是字符串。我怎么把它变成一个字符串???我试过toString()。另外,inputs.length 不是 0。我查过了。

for (var i = 0; i < inputs.length; i++)
{
     if (inputs[i].className.indexOf("blah") == 1)
     {
      //do something
     }
}

我只想对类名类似于“blah 1;2;3;4”的输入数组值做一些事情。

任何帮助将不胜感激。

【问题讨论】:

  • 类名没有indexOf 方法。
  • @nicooga (typeof document.createElement('input').className) === 'string';

标签: javascript string indexof classname


【解决方案1】:

indexOf(value) 在不匹配时返回-1,在匹配时返回以0 开头的索引。

在您的情况下,您应该将结果与 0 而不是 1 进行比较。


注意,如果你想测试一个节点是否有某个特定的类名,这不是一个好习惯。

更好的方法是使用现代浏览器中可用的 DOM API node.classList.contains()

或者使用正则表达式/\bblah\b/.test(node.className)来避免blah是另一个类名的子字符串的情况,比如not-blah

另一种方法是使用mootools,它提供node.hasClass()HTMLElement 的实例。

或者使用像$(node).hasClass()这样的jQuery。

【讨论】:

    【解决方案2】:

    如果你想检查一个类是否存在,检查 indexOf() !== -1 因为 indexOf 返回搜索词开始的索引。仅当它从第二个字符开始时检查 1 才有效。类似地,检查 0 仅在它从开头开始时才有效,但如果有多个类,它可能出现在任意数量的其他索引处,在这种情况下,它将返回 0 以外的某个值。

    正如 xiaoyi 指出的那样,您可能拥有与您正在寻找的类名足够相似的类名,它可能会返回误报。为避免这种情况,如果您仍想使用 indexOf,则需要进行一些额外的检查。首先,我将在 ' ' 上拆分 className 并遍历生成的数组进行索引检查。然后,在任何 indexOf() !== -1 值上,检查该值的长度是否等于您要检查的值的长度。

    【讨论】:

    • 但如果有其他类名包含blah,它仍然是一个不完整的解决方案。 /\bblah\b/.test() 听起来更好。
    • 这是真的。正则表达式将是更好的解决方案。
    猜你喜欢
    • 2017-06-04
    • 2014-01-28
    • 2015-09-13
    • 1970-01-01
    • 2014-11-07
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多