3

我做了一些谷歌搜索,发现以下代码不起作用,因为 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”的输入数组值做一些事情。

任何帮助,将不胜感激。

4

2 回答 2

5

indexOf(value)-1不匹配时返回,匹配时返回索引0

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


请注意,如果您想测试一个节点是否有某个特定的类名,这不是一个好的做法。

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

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

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

或者使用 jQuery 之类的$(node).hasClass().

于 2012-11-17T06:47:52.830 回答
2

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

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

于 2012-11-17T06:52:06.007 回答