Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在生成html内容的for循环中放置换行符_Javascript - Fatal编程技术网

Javascript 在生成html内容的for循环中放置换行符

Javascript 在生成html内容的for循环中放置换行符,javascript,Javascript,我有一个生成一些HTML内容的for循环: var boxes = ""; for (i = 0; i < 11; i ++) { boxes += "<div class=\"box\"><img src=\"unlkd.png\"/></div>"; } document.getElementById("id").innerHTML = boxes; 我想在一行中显示3个框,然后在它们下面显示一行中的2个框,然后是1,然后是3,2和1

我有一个生成一些HTML内容的for循环:

var boxes = "";

for (i = 0; i < 11; i ++) {
    boxes += "<div class=\"box\"><img src=\"unlkd.png\"/></div>";
}

document.getElementById("id").innerHTML = boxes;
我想在一行中显示3个框,然后在它们下面显示一行中的2个框,然后是1,然后是3,2和1


首先,我考虑使用if语句来检查i>2是否添加换行符,但它也会在每个超过第三个的框之后添加换行符。我对javascript的基本知识告诉我,我必须为每一行创建一个循环。有什么建议吗?

我会使用不同的方法:

var boxes = "",
    boxesInRow = 3,
    count = 0;

for (i = 0; i < 11; i ++) {
    boxes += "<div class=\"box\"><img src=\"unlkd.png\"/></div>";
    count++;
    if(count === boxesInRow) {
       boxes += "<br/>";
       boxesInRow -= 1;
       count = 0;
       if (boxesInRow === 0) {
           boxesInRow = 3;
       }
   }
}

document.getElementById("id").innerHTML = boxes;
使用数组存储每行的项目数:

var array = [3, 2, 1, 3, 2];
然后,使用两个循环来迭代

for(var i = 0; i < array.length; i++){
    //Start the row 
    for(var j = 0; j < array[i]; ++j){
        //create the item inline
    }
    //End the row 
}
在每次创建项目时,将id设置为

var id = 'boxes_inline_' + counter++;
并将此值添加到正在生成的项中


注意:这是我用来构建表单生成器的算法的一小部分。当然,数组包含更多的值和属性。但这为基于JSON构建表单提供了一个非常好的解决方案。您可以尝试以下方法:

主意 保留批量大小的数组 循环数组并检查迭代器是否与位置一致 如果是,则更新位置和索引以获取下一个位置 变量框=; var区间=[3,2,1]; var位置=间隔[0]; var指数=0; 对于i=0;i<11;i++{ 框+=; 如果位置-1==i{ 框+=; 索引=索引+1%间隔。长度; 位置+=间隔[索引] } } document.getElementByIdcontent.innerHTML=box; .盒子{ 显示:内联块; }
请参阅syntax->array->[3,2,1,3,2]不用担心,如果op需要有限的重复,您的解决方案是干净的:@AxelH只是一个指针,而不是重复[…,3,2],使用mod运算符来重复模式。@Rajesh好吧,我使用这个解决方案是因为,是的,实际的模式可以用模来完成,但我保持通用性。如果模式变得随机,那么维护起来就更简单了。如果需要,可以使用模构建模式;但是,非常优雅的解决方案是,每个框都有不同的id,这将创建每行具有相同id的框。很抱歉,我的问题中没有包括这一点,但这也可以派上用场。你能解释一下array.length是什么吗?这似乎对我最合适。我的框实际上有一个float:left属性,但是我添加了一个带有clear:all属性的div来代替br,这两个属性都可以正常工作。
var id = 'boxes_inline_' + counter++;
 var i;
    var boxes = "";
    for (i = 0; i < boxes.length; i++) {
        boxes += "<div class=""><img src=""/></div>";
        function displayboxes() {
        "use strict";
        for (i = 0; i < boxes.length; i++) {
            out.appendChild(document.createTextNode(boxes[i] + "<br>"));
        }
    }
        displayboxes(boxes);