我有一個相當複雜的舊infragistics UltraWebGrid的實現。我試圖強制進入瀏覽器兼容性,即使他們只是告訴我升級。我的網格不爲非IE瀏覽器的特定網格呈現行。我已經將錯誤追蹤到一些內置的JavaScript,我將在下面添加它。我想我可以通過在網格html表中添加一個tbody元素來強制網格工作,然後它會嘗試渲染動態添加的行。我接觸這個想法的邏輯如下。我會如何去做這件事?如何強制tbody元素進入非IE瀏覽器的空表
根據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;
你試圖改變年初this.Grid._innerObj.innerHTML = 「<表樣式= \」 表格的佈局:固定; \ 「>
」 + strTransform + 「」? –它確實看起來好像這將是最好的選擇。所以我應該能夠覆蓋這個編譯的JavaScript?它的所有ScripResource出第三方控制。 – jumpdart
是的,設置innerHTML會在您的網頁中創建HTML。如果strTransform已經包含一個tbody,你可以跳過添加一個,如果沒有,你可以通過改變strTransform來添加一個。 –