Reputation: 2489
So im just testing a basic functionality on JavaScript. Im trying to set the <li>
within the <ul>
but for some simple reason my li
gets placed outside the ul
.
var test = document.getElementById('testdiv');
var data = [1,2,3,4,5];
test.innerHTML += '<ul>';
for (var i = 0; i < data[i]; i++)
{
test.innerHTML += '<li>' + i + '=' + data[i] + '</li>';
}
test.innerHTML += '</ul>';
.start{
border: 1px solid #000;
}
<div class="start" id="testdiv"></div>
Current html
outcome looks like this:
<div class="start" id="testdiv">
<ul></ul>
<li>0=1</li>
<li>1=2</li>
<li>2=3</li>
<li>3=4</li>
<li>4=5</li>
</div>
Expected outcome with an simple explanation would be much appreciated.
<div class="start" id="testdiv">
<ul>
<li>0=1</li>
<li>1=2</li>
<li>2=3</li>
<li>3=4</li>
<li>4=5</li>
</ul>
</div>
Upvotes: 5
Views: 8703
Reputation: 248
I had problem with li last element was not getting populated in my case.
I changed my code From
$('.ul_food_item').innerHTML = li_elem_new;
To
$('.ul_food_item').html(li_elem_new);
My problem was solved.
Upvotes: 0
Reputation: 4527
@MikeChristensen explains why it is bad practice to use innerHtml
within for
loop.
Every time innerHTML is set, the HTML has to be parsed, a DOM constructed, and inserted into the document.
Try to use temporary string variable instead:
var myList = '<ul>';
for (var i = 0; i < data[i]; i++) {
myList += '<li>' + i + '=' + data[i] + '</li>';
}
myList += '</ul>';
test.innerHTML = myList;
Upvotes: 5
Reputation: 1369
Instead of using above approach you can use below one.
Possible reason is browser might adding the closing tag automatically to the opened tag.
var test = document.getElementById('testdiv');
var data = [1,2,3,4,5];
var ulelement = document.createElement("ul");
for (var i = 0; i < data[i]; i++)
{
ulelement.innerHTML += '<li>' + i + '=' + data[i] + '</li>';
}
test.appendChild(ulelement);
.start{
border: 1px solid #000;
}
<div class="start" id="testdiv"></div>
Upvotes: 5
Reputation: 7923
Use appendChild()
method instead:
var test = document.getElementById('testdiv');
var ul = document.createElement('UL');
var data = [1,2,3,4,5];
for (var i = 0; i < data[i]; i++)
{
var li = document.createElement('LI');
li.innerHTML = i + '=' + data[i];
ul.appendChild(li);
}
test.appendChild(ul)
.start{
border: 1px solid #000;
}
<div class="start" id="testdiv"></div>
Upvotes: 0