我有一个非常复杂的旧基础设施 UltraWebGrid 实现。我试图强制浏览器兼容性,即使他们只是告诉我升级。我的网格没有为非 IE 浏览器呈现某个网格的行。我已将错误追溯到一些内置的 javascript,我将在下面添加。我想我可以通过在网格 html 表中添加一个 tbody 元素来强制网格工作,然后它会尝试呈现动态添加的行。我遇到这个想法的逻辑如下。我该怎么做呢?
根据This SO question,只有 IE 会自动将 tbody 元素广告到空表中。其他浏览器需要至少一行才能存在 tbody 元素。似乎阻止此网格呈现的 javascript 错误是无法获取主网格表的 tbody 元素。如果浏览器不是 IE,则应该可以通过 javascript 强制表中的 tbody 元素来解决此问题。
旧的 infragistics 网格的内置 javascript 似乎假设这个 tbody 元素将存在于一个空网格中。因此,我的页面无法在非 IE 浏览器中加载网格的行,因为 javascript 正在调用一个不存在的元素。
破坏javascript:
(这在非 IE 浏览器的最后一行中断。我假设因为没有 tbody 元素)
var strTransform = this.applyXslToNode(this.Node);
if (strTransform)
{
var anId = (this.AddNewRow ? this.AddNewRow.Id : null);
this.Grid._innerObj.innerHTML = "<table style=\"table-layout:fixed;\">" + strTransform + "</table>";
var tbl = this.Element.parentNode;
igtbl_replaceChild(tbl, this.Grid._innerObj.firstChild.firstChild, this.Element);
igtbl_fixDOEXml();
var _b = this.Band;
var headerDiv = igtbl_getElementById(this.Grid.Id + "_hdiv");
var footerDiv = igtbl_getElementById(this.Grid.Id + "_fdiv");
if (this.AddNewRow)
{
if (_b.Index > 0 || _b.AddNewRowView == 1 && !headerDiv || _b.AddNewRowView == 2 && !footerDiv)
{
var anr = this.AddNewRow.Element;
anr.parentNode.removeChild(anr);
if (_b.AddNewRowView == 1 && tbl.tBodies[0].rows.length > 0)
tbl.tBodies[0].insertBefore(anr, tbl.tBodies[0].rows[0]);
else
tbl.tBodies[0].appendChild(anr);
}
this.AddNewRow.Element = igtbl_getElementById(anId);
this.AddNewRow.Element.Object = this.AddNewRow;
}
this.Element = tbl.tBodies[0];
this.Element.Object = this;