2011-09-01 81 views
24

我有一個類別頁面,當用戶點擊一個類別時,該類別下的項目通過jQuery Ajax調用,在表格中加載,然後卡入到一個元素中低於該類別。看起來會發生什麼,是加載表中的一行或兩行,將其數據偏移到隨機列。我已經在IE9,FF 3.6和Chrome 13中測試過了。這似乎只發生在IE9中。表格數據格式完美 - 我使用Fiddler攔截請求,然後查看原始html,並且沒有任何問題。IE9表具有隨機列的隨機行

該網站建立在ASP.NET MVC3。通過Ajax請求返回的表格返回一個Razor局部視圖。不幸的是,這必須在IE中運行。我真的希望有人對此有一個解釋。

這裏有一個例子: Notice the offset on the second column 而另: Notice the offset on the second to last column

EDIT [2012/03/25]:此應用程序已離開我的手,所以我無法驗證其答案的工作。 Adam Youngers發佈到http://social.msdn.microsoft.com/Forums/pl/iewebdevelopment/thread/e6f49d52-ec3f-47c5-802e-b80d1a58ed39的鏈接似乎有一些可能的解決方案。從過去的經驗,我先試試這些選項..

  1. 添加<元HTTP的當量= 「X-UA兼容」 內容= 「IE = 8」/ >到頁面的頭元素。
  2. 嘗試刪除表格單元格之間的任何空白。例如。 「</td > <td>」,而不是讓下一個單元格在新行上開始。 (這在過去對我造成了奇怪的間距問題)
+0

您應該發佈表格的結果html,如果它太長,只發布有問題的行的結果代碼。 –

+0

我有同樣的問題,並希望補充說,每次我重新加載相同的頁面,它發生在不同的行和列。 html沒有錯。 –

+0

我有同樣的問題。我已經完成了表格的HTML,並沒有錯。我的表格還包含表單元素。我不確定這在技術上是否符合語義。 –

回答

24

問題似乎是白色間距。

我發現http://social.msdn.microsoft.com/Forums/en-AU/iewebdevelopment/thread/28d78780-c95c-4c35-9695-237ebb912d90

這個答案替換你使用正則表達式像這樣的AJAX調用獲取的HTML。

var expr = new RegExp('>[ \t\r\n\v\f]*<', 'g'); 
tableHtml = tableHtml.replace(expr, '><'); 
+3

如果其他人並不清楚如何獲取和更新上面的tableHtml變量,下面是爲我工作的代碼:var expr = new RegExp('> [\ t \ r \ n \ v \ f] * <','g 「); var替換= $('。cal-table')。html()。replace(expr,'><'); $('。cal-table')。html(replacement); $('。cal-table')。tableScroll({height:540,width:tableWidth}); – Winger

+0

這裏有一些進一步的討論:http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/e6f49d52-ec3f-47c5-802e-b80d1a58ed39 – Mike

+0

上面的解決方案最初工作,但沒有涵蓋了我所有的案例。我一直在隨機獲取空間。我發佈的解決方案解決了我的問題。 –

1

我使用的答案從另一個帖子Remove whitespace and line breaks between HTML elements using jQuery那裏有一個腳本這是比上面的一個更有效。我使用了answer來解決它,但我會重複它以獲得完整答案。

jQuery.fn.htmlClean = function() { 
    this.contents().filter(function() { 
     if (this.nodeType != 3) { 
      $(this).htmlClean(); 
      return false; 
     } 
     else { 
      return !/\S/.test(this.nodeValue); 
     } 
    }).remove(); 
    return this; 
} 

最終,這只是一個臨時解決方案,應由Microsoft在IE9/10中修復。

+0

我不確定你是否做了一些性能測試,但是這個解決方案對於大型表格來說有點過分。 – Ravi

+1

我同意這是一張非常大的桌子上的巨大表現。這是解決問題的辦法。更好的解決方案是MS解決這個問題。 –

0

給出的解決方案@Johann Strydom的作品,但如果你不想觸摸每一個元素,只關注表內容模型。

這是我的領導在工作中設計的一個更好的正則表達式。

if (jQuery.browser.msie && jQuery.browser.version === '9.0') 
{ 
    data = data.replace(/>\s+(?=<\/?(t|c)[hardfob])/gm,'>'); 
} 

覆蓋所有的表,字幕,COLGROUP,山口,TBODY,THEAD,TFOOT,TR,TD,th元素。

0

按照Krummelz的建議,加入<meta http-equiv="X-UA-Compatible" content="IE=8" />會使問題消失。

對於我的具體問題,我有一個jQuery日期選擇器和常規標籤,在IE9中呈現正確,但在jquery ajax調用後會下移到數據中。把上面的標籤修復它給我。這是值得一試的。祝你好運。

0

白色間距也是我的問題,雖然我的情況有點不同。這個線程幫助我解決了這個問題(謝謝大家)。

我的表會很好,然後在回發後隨機添加一列。這裏是我的代碼之前和之後:

之前:除去行(:(我有大約10人被格式化以同樣的方式並未導致此問題,但這次是)

<tr> 
    <th class="width125px th-left-borders"> 
     Intangibles 
    </th> 
    <td><asp:TextBox ID="txtCustFinancial_Intangibles" runat="server" 
      CssClass="textToLabel widthFull textbox_number_align"></asp:TextBox> 
    </td> 
</tr> 

後休息通常很好,但由於某種原因,這是一個問題)

<tr> 
    <th class="width125px th-left-borders">Intangibles</th> 
    <td><asp:TextBox ID="txtCustFinancial_Intangibles" runat="server" 
      CssClass="textToLabel widthFull textbox_number_align"></asp:TextBox></td> 
</tr> 

希望這也能幫助別人。