0

更新——这是对周一 11 月 26 日问题的完整重写


此代码有效:

name_this_table = "station_list"+i;
station_table = document.getElementById(name_this_table);

for (station_index in station_detail)
{
    newRow = station_table.getElementsByTagName("tbody")[0].insertRow(-1);

    newCell = newRow.insertCell(-1);
    newCell.appendChild(document.createTextNode("one"));

    newCell = newRow.insertCell(-1);
    newCell.appendChild(document.createTextNode("two"));
    newRow = null;
}

但我想使用createDocumentFragment(),像这样:

name_this_table = "station_list"+i;
station_table = document.getElementById(name_this_table);  // NOTE 1
//station_table = document.getElementById(name_this_table).tBodies[0];

var tableFrag;
tableFrag = document.createDocumentFragment();
tableFrag.appendChild(station_table);  // NOTE 2

for (station_index in station_detail)
{
    newRow = station_table.getElementsByTagName("tbody")[0].insertRow(-1); // NOTE 3
  //newRow = tableFrag.getElementsByTagName("tbody")[0].insertRow(-1);
    newCell = newRow.insertCell(-1);
    newCell.appendChild(document.createTextNode("one"));

    newCell = newRow.insertCell(-1);
    newCell.appendChild(document.createTextNode("two"));
    newRow = null;
}        
document.getElementById(name_this_table).appendChild(tableFrag);

我有各种失败要报告——不是运行时错误,而是渲染停止。

  • 注 1(上)——我尝试了下面的行(使用tbodies)作为替代。
  • 注意 2 -- 如果我取消注释此行,则渲染将在该点停止。
  • 注意 3 -- 在这里我尝试使用 tableFrag ...
4

1 回答 1

0

新答案于 11 月 27 日星期二发布

经过大量的实验,这行得通。我喜欢任何反馈(一方面,我不确定我是否看到了性能提升。

name_this_table = "station_list"+i;
station_table = document.getElementById(name_this_table);  

var tableFrag;
tableFrag = document.createDocumentFragment();
tableFrag.appendChild(station_table);  // NOTE 2

for (station_index in station_detail)
{
    station_id = station_detail[station_index]["station_id"];
    var newRow;
    newRow = document.createDocumentFragment();
    newRow = station_table.getElementsByTagName("tbody")[0].insertRow(-1);

    newCell = newRow.insertCell(-1);
    newCell.appendChild(document.createTextNode("one"));

    ...

    station_table.appendChild(newRow);
    newRow = null;
} 
于 2012-11-21T15:59:43.323 回答