另一个不在IE工作的追加者

时间:2011-10-06 17:28:07

标签: javascript internet-explorer

我有一个appendChild JS函数,除IE之外的所有浏览器都能很好地工作。

我正在使用JS数组并将此数据附加到表中。

http://jsfiddle.net/2waZ2/51/有代码 - 并且在小提琴中工作正常!

我已经查看了其他答案,他们的问题似乎与我的有点不同。也许我只需要做一个tbody,但我真的不知道该怎么做。

什么是最好的方法来重写这个在Ie工作?

在小提琴中添加代码部分:

var row =  document.createElement('tr');
row.innerHTML = displayArrayAsTable(QR4, 24, 25);
document.getElementById('mytable').appendChild( row ) ; 

function displayArrayAsTable( array, from, to ) {
  var array = array || [],
  from = from || 0,
  to = to || 0;
 var html = '';

 if ( array.length < 1 )
{
  return;
}
if ( to == 0 )
{
    to = array.length - 1;
}
for ( var x = from; x < to + 1; x++ )
 {
html += '<td>' + array[x] + '</td>';
}
 return html;
}

1 个答案:

答案 0 :(得分:2)

最好的方法是使用insertRow [MDN]

var row = document.getElementById('mytable').insertRow(-1);
row.innerHTML = displayArrayAsTable(QR4, 24, 25);

关于tBody:是的,这可能是问题所在。浏览器总是生成tBody元素,无论是否在HTML中指定。
也许您可以通过将新行添加到此tBody元素来解决您的问题:

document.getElementById('mytable').tBodies[0].appendChild( row );

但我记得读过IE在使用普通DOM操作方法操作表时遇到问题。在这种情况下是否也适用,我不知道。 insertRow在任何情况下都应该有用。

更新:事实上,IE似乎不喜欢用td附加innerHTML个元素。解决方案是将row作为参数传递给displayArrayAsTable并使用insertCell [MDN]创建新的单元格。

更新2:例如,你可以这样做:

for ( var x = from; x < to + 1; x++ )
{
    var cell = row.insertCell(-1);
    cell.innerHTML = array[x];
}

其中row是函数的第四个参数,并调用为:

var row = document.getElementById('mytable').insertRow(-1);
displayArrayAsTable(QR4, 24, 25, row);