Reputation: 23
I'm trying to create an array of Divs, but the below code runs incorrectly.
JS Code that runs incorrectly (actual JS below): http://codepen.io/anon/pen/admWpm
var n=4; //no. of Triangles
var j=1; // j is just used to number the triangles
for(var i=1;i<n;i++)
{
document.body.innerHTML+='<div class="row row'+i+'">'; //Open row div
//Create squares
for(var k=0;k<n;k++){
if (k % 2 === 0) { //Even squares
document.body.innerHTML+='<div class="square square1 '+(j++)+'"></div>';
}
else{ //Odd squares
document.body.innerHTML+='<div class="square square2 '+(j++)+'"></div>';
}
}
document.body.innerHTML+='</div>'; //close row div
}
Simplification of the output:
<div class="row row1"></div>
<div class="square square1"></div>
<div class="square square2"></div>
<div class="square square3"></div>
<div class="square square4"></div>
<div class="row row2"></div>
<div class="square square5"></div>
<div class="square square6"></div>
<div class="square square7"></div>
<div class="square square"></div>
The output I would like:
<div class="row row1"></div>
<div class="square square1"></div>
<div class="square square2"></div>
<div class="square square3"></div>
<div class="square square4"></div>
</div>
<div class="row row2">
<div class="square square5"></div>
<div class="square square6"></div>
<div class="square square7"></div>
<div class="square square"></div>
</div>
I think I'm using innerHTML
incorrectly?
Upvotes: 0
Views: 152
Reputation:
Here's a quick example using DOM methods to create and append elements.
var n = 4; //no. of Triangles
var j = 1; // j is just used to number the triangles
for (var i = 1; i < n; i++) {
var d = document.body.appendChild(document.createElement("div"));
d.className = "row row" + i;
//Create squares
for (var k = 0; k < n; k++) {
var s = d.appendChild(document.createElement("div"));
s.textContent = "i:" + i + ", j:" + j;
s.className = "square square" + ((k % 2) + 1) + " " + j++;
}
}
.square {
width: 70px;
height: 30px;
margin: 4px;
background: orange;
color: white;
}
.square2 {
background: red;
}
The square
classes in your code didn't seem to match your desired output, so you may need to tweak a little there.
I added a little text content and CSS to make it easier to view the output.
Upvotes: 1