使用 javascript 将内容添加到表格行 ()?

发布于 2024-10-14 06:20:18 字数 909 浏览 1 评论 0原文

我有一个如下表:

<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>

现在的问题是我需要在中间行(id = insert)之后动态插入新行。我有一个自定义的 javascript 函数,可以通过对下一个元素使用 insertBefore 调用来在元素之后插入元素。

使用以下 javascript 成功创建新行:

var new_row = document.createElement('tr');
new_row.innerHTML="<td>test</td>";
insertAfter(document.getElementById("insert"), new_row);

但是,新行拒绝接受使用innerHTML 的任何简单 html 格式。新行的最终输出如下所示:

<tr>test</tr>

您会看到它不想输出我指定的内容。实际的脚本要复杂得多,因此不幸的是,使用appendChild或类似函数手动添加每个脚本将非常耗时,而且可能相当耗费资源。无论如何,我是否可以向该表行添加一个“html 块”,并在该块中定义表列?

我很困惑,非常感谢任何帮助。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

弄潮 2024-10-21 06:20:18

您可以使用本机 insertCell() 方法插入单元格。

尝试一下:

示例: http://jsfiddle.net/VzTJa/

var new_row = document.createElement('tr');
new_row.insertCell(0).innerHTML = "test";
new_row.insertCell(1).innerHTML = "test2";

或者您也可以在没有 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";

给出尝试一下这个解决方法:

示例: 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);

基本上创建了几个表示表格的开始和结束标记的字符串。您将它与您的内容连接起来,并将其设置为临时 divinnerHTMl,然后获取所需的行,并执行 .appendChild()< /代码>。

可能有更好的方法,或者你可能会找到一种方法来改进这个方法。

我在浏览这篇文章中的解决方案后想到了这个显然是在 IE 上工作并且部分负责解析器的家伙。

You can use the native insertCell() method to insert cells.

Give this a try:

Example: http://jsfiddle.net/VzTJa/

var new_row = document.createElement('tr');
new_row.insertCell(0).innerHTML = "test";
new_row.insertCell(1).innerHTML = "test2";

or you can accomplish it without your insertAfter() function by using insertRow() as well.

Example: 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";

Give this workaround a try:

Example: 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);

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 innerHTMl of a temporary div, 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.

背叛残局 2024-10-21 06:20:18

如果您可以使用 jQuery,请尝试其中的追加方法。 jQuery 附加参考

如果您确实发现性能是一个问题,您可能会通过构建您想要在 javascript 中添加动态 DOM,然后将其附加到实际的 HTML DOM 元素以使其可见。这将使您的重涂次数降至最低。

If you can use jQuery, try the append method from it. jQuery append reference

If you do find performance to be an issue, you might find an improvement by building up the dynamic DOM you want to add in javascript before appending it to the actual HTML DOM element that will make it visible. This will keep your number of repaints to a minimum.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文