【问题标题】:When trying to dynamically add table elements using JavaScript via innerHTML doesn't render in IE7, IE8 and IE9尝试通过 innerHTML 使用 JavaScript 动态添加表格元素时,在 IE7、IE8 和 IE9 中不呈现
【发布时间】:2011-11-01 05:56:51
【问题描述】:

我一直在互联网上搜索这个,我很难过。以下 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;

有什么想法吗?提前谢谢你。

【问题讨论】:

  • innerHTML 和 IE 中的表格不能一起使用。在设置单元格的 innerHTML 属性之前尝试将表格放入文档中。
  • 太棒了....哦,IE大声笑...无论如何,表格已经添加为纯HTML,并且在此函数调用之前,我正在删除该表格中的所有行。那么,我是否应该重新设置表(换句话说,在我删除行时将其删除)然后重新设置它?然后从那里添加行/列?
  • 我不知道你在做什么,但是如果你直接向表格元素添加行,在 IE 中会失败,你必须将它们添加到 tbody 元素(tbody 是强制性的,尽管标签是可选的,但即使您省略了标签,表格中也总会有一个 tbody)。如果只有一个(即您没有任何标签),您可以将其引用为 table.tBodies[0]`

标签: javascript internet-explorer innerhtml


【解决方案1】:

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

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

在上面的 HTML 中,浏览器会在 table 和 row 元素之间添加一个 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);

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

【讨论】:

  • 不幸的是,这也不起作用。我决定做的不是删除/修改我的表格行,而是在单元格内使用&lt;span 标签并设置其中的innerHTML。不过谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-12-06
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多