ループが最初に実行されると、すでに 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);