6

私は配列を持っています。私はそれをループしています。最初に必要なのは、ループが最初に実行されるときに、すでに div を開いてテキストを追加する必要があることです。次に、ループが 3 回実行された場合は、前の div を閉じて新しい div を開きます。

コード:

var counter = 0;
for (var i = 0; i < tag_array.length; i++) {
    counter++;
    if (counter == 3) {
        counter = 0;
        document.write("</div>");
        document.write("<div class='span6'>");
    } else {
        document.write("<div class='span6'>");
    }
    document.write("<div class='tag'>" + toTitleCase(tag_array[i]) + "</div>");
}

上記のコードは機能しません。どうしてか分かりません。私が間違っていることを説明してください。どうすれば修正できますか?

4

2 に答える 2

3

ループが最初に実行されると、すでに div が開いてテキストが追加されているはずです。次に、ループが 3 回実行された場合は、前の div を閉じて新しい div を開きます。

あなたが間違っている理由は、カウンターが2であってもelse { document.write("<div class='span6'>");}原因になるからです.document.write

したがって、次のように変更する必要がありますelse if(counter == 1)

var counter = 0;
for (var i = 0; i < tag_array.length; i++) {
    //this line indicates that the counter will only be either 1,2,3 when it enters the if statement
    counter++;
    if(counter == 3){
        counter = 0;
        document.write("</div>");
    }else if(counter == 1){
        document.write("<div class='span6'>");
    }
    document.write("<div class='tag'>" + toTitleCase(tag_array[i]) + "</div>");
}

混乱を避けるために、if ステートメントを switch ステートメントに変更counter++;し、switch ステートメントを使用して for ステートメントを while ステートメントにすることができます。

var counter = 0;
var i = 0;
var length = tag_array.length;
while (i <length) {
    switch(counter){
        case 2:
        document.write("</div>");
        //when counter reaches 2, set it back to 0 and leave the switch statement;
        counter = 0;
        break;
        case 0:
        document.write("<div class='span6'>");
        case 1:
        //counter++ will only be triggered when counter is 1 or 0;
        counter++;
    }
    document.write("<div class='tag'>" + toTitleCase(tag_array[i]) + "</div>");
    i++;
}

または、より効率的にしたい場合は、以下のコードを使用できます。(フレンチーの回答に触発されました。私は彼の回答を適切に機能するものに修正しました。以下のコードのためにこの回答に賛成または同意したい場合は、代わりにに賛成または同意してください。 )

var a = '<div class="span6">';

var length = tag_array.length;

for (var i = 0; i < length; i++) {


  a += '<div class="tag">' + toTitleCase(tag_array[i]) + '</div>';

 if (i % 3 == 2) {

      a += '</div><div class="span6">';
  }

}

a += '</div>';

document.write(a);
于 2013-09-28T21:12:10.897 に答える