当尝试通过innerHTML 使用 JavaScript 动态添加表格元素时,无法在 IE7、IE8 和 IE9 中呈现

发布于 2024-12-12 17:41:55 字数 1089 浏览 2 评论 0原文

我在互联网上搜索了很多这个,但我被难住了。以下 Javascript 可在 Chrome、Firefox 和 Safari 中运行,但由于某种原因,它无法在 IE 7+ 中运行。我所说的“不起作用”是指当尝试添加表格元素时,浏览器/屏幕上没有显示任何内容。我使用了 IE 的内置开发工具,控制台中的调试器上没有显示任何内容。

简而言之,我要做的就是创建第一列中有一个复选框、第二列中有纯文本的表行。此外,整个方法是在 AJAX 事件之后调用的。

代码如下:

tdObjs[0].innerHTML = '<input type="checkbox" name="page" value="' + pageID + '" 
onClick="fooFunction(\'' + pageID + '\', this,
 \'_images/foo/' + pageID + '.png\', \'' + pageID 
+ '\')" checked="yes">';

其中 pageID 是传递给此函数的变量(在本示例中,其 int 值为 5)。 tdObjs 的定义如下:

var tdObjs = trObj.getElementsByTagName('TD');

trObj 被传递到该函数中。 trObj 确实显示在 IE 开发工具的 local 窗口中,因为它是在另一个函数中定义的,如下所示:

var tableObj = $('##FooTable')[0];
var trObj = document.createElement('tr');
trObj.appendChild(document.createElement('td'));
for (var i=0;i<2;i++)
        trObj.appendChild(document.createElement('td'));
tableObj.appendChild(trObj);
return trObj;

有什么想法吗?先感谢您。

I've been searching the interweb a bunch for this one and I'm stumped. The following Javascript works in Chrome, Firefox, and Safari, but for whatever reason it is not working in IE 7+. What I mean by 'not working' is that when trying to add table elements, nothing shows up in the browser / on the screen. I've used IE's built-in Developer tools, and nothing shows up on the de-bugger in the Console.

In a nutshell, all I'm trying to do is create table rows that have a checkbox in the first column, and plain text in the second column. Also, this entire method is being called after an AJAX event.

Here is the code:

tdObjs[0].innerHTML = '<input type="checkbox" name="page" value="' + pageID + '" 
onClick="fooFunction(\'' + pageID + '\', this,
 \'_images/foo/' + pageID + '.png\', \'' + pageID 
+ '\')" checked="yes">';

Where pageID is a variable passed to this function (in this exact example, its an int value of 5). tdObjs is defined by:

var tdObjs = trObj.getElementsByTagName('TD');

And trObj is passed into this function. trObj does show up in the local window of the IE Developer Tools as it is defined in another function like so:

var tableObj = $('##FooTable')[0];
var trObj = document.createElement('tr');
trObj.appendChild(document.createElement('td'));
for (var i=0;i<2;i++)
        trObj.appendChild(document.createElement('td'));
tableObj.appendChild(trObj);
return trObj;

Any ideas? Thank you in advance.

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

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

发布评论

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

评论(1

故人爱我别走 2024-12-19 17:41:56

在 IE 中向表格添加行时,必须将它们添加到 tbody 中,例如

<table id="foo">
  <tr>
    <td>cell 0
    <td>cell 1
</table>

在上面的 HTML 中,浏览器将在表格和行元素之间添加一个 tbody 元素。 tbody 是强制性的,但标签是可选的。因此,要添加行,您必须执行以下操作:

var table = document.getElementById('foo');
var tbody = table.tBodies[0];
var row = document.createElement('tr');
var cell = document.createElement('td');

// Give cell some content and add it
cell.appendChild(document.createTextNode('cell 0'));
row.appendChild(cell);

// Make another cell and add it
cell = cell.cloneNode(false);
cell.appendChild(document.createTextNode('cell 1'));
row.appendChild(cell);

tbody.appendChild(row);

克隆行并修改单元格内容可能比创建新行和单元格更有效。由你决定。

When adding rows to a table in IE, you must add them to the tbody, e.g.

<table id="foo">
  <tr>
    <td>cell 0
    <td>cell 1
</table>

In the above HTML, browsers will add a tbody element between the table and row elements. The tbody is mandatory but tags are optional. So to add rows you must do something like:

var table = document.getElementById('foo');
var tbody = table.tBodies[0];
var row = document.createElement('tr');
var cell = document.createElement('td');

// Give cell some content and add it
cell.appendChild(document.createTextNode('cell 0'));
row.appendChild(cell);

// Make another cell and add it
cell = cell.cloneNode(false);
cell.appendChild(document.createTextNode('cell 1'));
row.appendChild(cell);

tbody.appendChild(row);

It may be more efficient to clone a row and modify the cell contents rather than making new rows and cells. It's up to you.

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