I have a table as follows:
<table>
<tr>
<td>col 1</td><td>col2</td>
</tr>
<tr id="insert">
<td>field</td><td>Field 2</td>
</tr>
<tr>
<td>another field</td><td>one more field</td>
</tr>
</table>
Now the issue is that I need to dynamically insert new rows AFTER the middle row (id = insert). I have a custom javascript function to insert elementsAFTER an element by using an insertBefore call on the next element.
The new rows create successfully using the following javascript:
var new_row = document.createElement('tr');
new_row.innerHTML="<td>test</td>";
insertAfter(document.getElementById("insert"), new_row);
However, the new row refuses to accept any simple html formatting using the innerHTML. The final output of the new row looks something like:
<tr>test</tr>
You see it doesn’t want to output the I have specified. The actual script is a lot more complex and so unfortunately manually adding each using an appendChild or similar function would be far too time consuming and probably rather resource intensive. Is there anyway I can just add a ‘chunk of html’ to this table row and in this chunk define the table columns?
I’m baffled, any help is MUCH appreciated.
You can use the native
insertCell()method to insert cells.Give this a try:
Example: http://jsfiddle.net/VzTJa/
or you can accomplish it without your
insertAfter()function by usinginsertRow()as well.Example: http://jsfiddle.net/VzTJa/1/
Give this workaround a try:
Example: http://jsfiddle.net/VzTJa/2/
Basically creates a couple strings representing the opening and closing tags of a table. You concatenate it with your content, and set it as the
innerHTMlof a temporarydiv, then fetch the row you want, and do an.appendChild().There may be a better way, or you may find a way to improve this one.
I came up with this after glancing at a solution in this article from a guy who apparently worked on IE and is partly responsible for the parser.