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。

你做错的原因是因为即使计数器为2else { 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++;
}

或者,如果您想提高效率,可以使用下面的代码。(受frenchie 的回答启发。我将他的答案更正为一个正常工作的答案。如果您因为以下代码而想投票或接受此答案,请投票或接受他的代替。

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 回答
1

您正在打开另一个span而不是在每次迭代时关闭它,因此您应该将第一个跨度从循环中取出。

这应该可以,我还在</div>循环末尾添加了另一个

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

    document.write("<div class='tag'>" + toTitleCase(tag_array[i]) + "</div>");
    counter++;
    if (i === tag_array.length - 1) {
        document.write("</div>")
    }
}
于 2013-09-28T21:18:53.567 回答