$('#all_locations').append("<table>");
$('#all_locations').append("<tr><th>City</th></tr>");
$.each(data, function(i, item){
$('#all_locations').append("<tr>");
$('#all_locations').append("<td>"+item.city+"</td>");
$('#all_locations').append("<tr>");
}
$('#all_locations').append("</table>");
Output gotten using alert($('#all_locations').html());
<table></table>
<tr><th>City</th></tr>
<tr></tr><td>Seattle</td>
<tr></tr><td>Chicago</td>
This code fires when ajax call is finished. Any ideas why is it doing so?
Assume that data variable is the valid JSON object.
Add an
id
to the tag to solve this problem. Then add the sub element to thatid
instead of parent element.Running example, see here: http://jsfiddle.net/WHscf/1/
Instead of doing it that way, try something like this:
Here's another way that's closer to how you're currently doing it:
It's best practice to create a string of your HTML to append and run one
.append()
call on that string:It's pretty common to see people pushing items into an array and joining that array for the append:
Despite the abstraction that jQuery offers, you are operating on elements in the DOM, not tags in the HTML source.
jQuery('<table>')
is shorthand forjQuery(document.createElement('table'))
.You need to append your table rows to the table, not to the container (and likewise, the cells need to be added to the rows).