2012-11-30 13 views
3

我有一個相當複雜的舊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; 
+0

你試圖改變年初this.Grid._innerObj.innerHTML = 「<表樣式= \」 表格的佈局:固定; \ 「>」 + strTransform + 「」? –

+0

它確實看起來好像這將是最好的選擇。所以我應該能夠覆蓋這個編譯的JavaScript?它的所有ScripResource出第三方控制。 – jumpdart

+0

是的,設置innerHTML會在您的網頁中創建HTML。如果strTransform已經包含一個tbody,你可以跳過添加一個,如果沒有,你可以通過改變strTransform來添加一個。 –

回答

1

我會建議添加TBODY當你在設置的innerHTML頂端。檢查strTransform是否已經包含一個tbody,如果沒有,請自己添加一個tbody。喜歡的東西:

var tadd1 = ''; 
var tadd2 = ''; 
if (!(/\<tbody\>/.test(strTransform))) { 
    tadd1 = '<tbody>'; 
    tadd2 = '</tbody>'; 
} 
this.Grid._innerObj.innerHTML = 
    "<table style=\"table-layout:fixed;\">" + tadd1 + strTransform + tadd2 + "</table>"; 
+0

這絕對看起來像我的問題的答案...我只需要知道如何重寫/替換此代碼。我知道它是可能的,我只是沒有做到,或知道如何。 – jumpdart

+0

@jumpdart,我會檢查您的覆蓋問題。 (我們需要更多關於對象構造和訪問的信息,以回答該部分)。 –

相關問題