-1

このコード、

for (a = 0; a < 5;a++){ 
    var namex = document.getElementsByClassName("tooltip_sticky")[a].getAttribute("name",2);
    var n=namex.split("'");
    i = 0;
    while(i < 30) {
    var achou = n[i].indexOf("mission=1");
        if (achou == -1) {
        alert(achou);
        i++;
        }
        else {
            alert("Lol");
            i++;
        }
    }
}

最初に a を 0 として実行し、while を 30 回実行し、a に戻り、a を 1 に設定し、さらに 30 回実行し、a に戻り、2 に設定し、while を 30 回実行する必要があります...

しかし、最初の 30 回は WHILE を実行し、停止します。なぜ FOR に戻らないのですか?

4

1 に答える 1

2

ここでの基本的なことは、ループが継続しない理由は 2 つしかないということです。

  1. あなたが示していない何かがa、またはの値を変更しています

  2. エラーがスローされています (これは可能性が高いです)。

後者の場合、ブラウザの JavaScript コンソールでエラーを見つけることができます。

いずれの場合も、ブラウザーに組み込まれているデバッガーを使用してコードをステップ実行すると、エラーの場所を見つけるのに役立ちます。

コメントから、var n=namex.split("'");少なくとも 30 個の要素を持つ配列になるとは限らないようです。したがって、内部ループを変更する必要があります。

var n=namex.split("'");
i = 0;
while(i < n.length) { // <=== Change is here

...それ以外の場合は、そうでn[i]ある可能性がundefinedあり、その上でメソッドを呼び出そうとするとエラーがスローされます。


FWIW、あなたのwhileループもループになりたいforです:

for (i = 0; i < n.length; ++i) {
    var achou = n[i].indexOf("mission=1");
    if (achou == -1) {
        alert(achou);
    }
    else {
        alert("Lol");
    }
}

aまたはiの宣言をコードに表示していません。どこかで宣言していると思います。そうでない場合は、 The Horror of Implicit Globals の餌食になります。


最後に: 私が知る限りgetAttribute、2 つではなく 1 つの引数のみを受け入れます

于 2013-07-16T08:31:02.067 に答える