Mic*_*l D 6 html javascript dom dynamic
我有一张表如下:
<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>
Run Code Online (Sandbox Code Playgroud)
现在问题是我需要在中间行(id = insert)之后动态插入新行.我有一个自定义的javascript函数,通过对下一个元素使用insertBefore函数来插入elementsAFTER元素.
使用以下javascript成功创建新行:
var new_row = document.createElement('tr');
new_row.innerHTML="<td>test</td>";
insertAfter(document.getElementById("insert"), new_row);
Run Code Online (Sandbox Code Playgroud)
但是,新行拒绝使用innerHTML接受任何简单的html格式.新行的最终输出类似于:
<tr>test</tr>
Run Code Online (Sandbox Code Playgroud)
你看它不想输出我指定的.实际的脚本要复杂得多,不幸的是,使用appendChild或类似功能手动添加每个脚本会耗费太多时间,而且可能相当耗费资源.无论如何我可以在这个表行中添加一个"hunk"块并在这个chunk中定义表列吗?
我很困惑,任何帮助都非常感激.
您可以使用本机insertCell()方法插入单元格.
尝试一下:
示例: http ://jsfiddle.net/VzTJa/
var new_row = document.createElement('tr');
new_row.insertCell(0).innerHTML = "test";
new_row.insertCell(1).innerHTML = "test2";
Run Code Online (Sandbox Code Playgroud)
或者你也可以insertAfter()通过使用来完成它而不需要你的功能insertRow().
示例: http ://jsfiddle.net/VzTJa/1/
var insert = document.getElementById("insert");
var new_row = insert.parentNode.insertRow( insert.rowIndex + 1 );
new_row.insertCell(0).innerHTML = "test";
new_row.insertCell(1).innerHTML = "test2";
Run Code Online (Sandbox Code Playgroud)
试试这个变通方法:
示例: http ://jsfiddle.net/VzTJa/2/
var temp = '<table><tbody><tr>';
var close_temp = '</tr></tbody></table>';
var temp_div = document.createElement('div');
var html_to_insert = '<td>tester</td><td>tester</td>';
temp_div.innerHTML = temp + html_to_insert + close_temp;
insertAfter(document.getElementById("insert"), temp_div.firstChild.firstChild.firstChild);
temp_div.removeChild(temp_div.firstChild);
Run Code Online (Sandbox Code Playgroud)
基本上创建一对表示表的开始和结束标记的字符串.您将它与您的内容连接起来,并将其设置为innerHTMl临时内容div,然后获取您想要的行,然后执行操作.appendChild().
可能有更好的方法,或者您可能会找到改进此方法的方法.
我从一个显然在IE上工作并且对解析器负有部分责任的人看了一篇解决方案后想到了这个.