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
     }
}

「何とか1;2;3;4」のようなクラス名を持つ入力配列値のみで何かをしたい。

どんな助けでも大歓迎です。

4

2 に答える 2

5

indexOf(value)一致しない場合は戻り-1、一致する場合はそのインデックスから始まり0ます。

あなたの場合、結果を 1 ではなく 0 と比較する必要があります。


ノードに特定のクラス名があるかどうかをテストしたい場合、これは良い方法ではないことに注意してください。

node.classList.contains()より良いアプローチは、最新のブラウザーで利用できるDOM APIを使用することです。

または、正規表現を使用して、別のクラス名の部分文字列で/\bblah\b/.test(node.className)あるケースを回避します。blahnot-blah

node.hasClass()もう 1 つの方法は、インスタンスに提供するmootools を使用することHTMLElementです。

または、jQuery などを使用します$(node).hasClass()

于 2012-11-17T06:47:52.830 に答える
2

クラスが存在するかどうかを確認する場合は、 indexOf() !== -1 を確認してください。 indexOf は、検索された用語が始まるインデックスを返すためです。1 のチェックは、2 番目の文字で始まる場合にのみ機能します。同様に、0 のチェックは最初から始まる場合にのみ機能しますが、複数のクラスがある場合は、他の任意の数のインデックスに表示される可能性があり、その場合、0 以外の値が返されます。

xiaoyi が指摘しているように、探しているクラス名と十分に類似したクラス名を使用すると、誤検知が返される可能性があります。これを回避するには、引き続き indexOf を使用する場合は、追加のチェックを行う必要があります。まず、className を ' ' で分割し、結果の配列を反復処理してインデックス チェックを行います。次に、任意の indexOf() !== -1 値で、値の長さがチェック対象の値の長さと等しいことを確認します。

于 2012-11-17T06:52:06.007 に答える